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

Struggling at the design phase. Are these indeed technical limitations?

1605422132

Edited 1605422166
SmashManiac
Sheet Author
HI all, I'm currently considering building a character sheet for Paranoia 25rh Anniversary Edition, and I'm running into a bunch of issues while attempting to design such a sheet, due to the nature of the game. Here are my questions: Is it possible to have a roll formula that would use an attribute if it's a valid integer, and fallback to a different attribute if blank? Characters have attributes hidden from them that the GM should keep track of. My current understanding is that if integrate any of them, players will be able to access the values, if only because they will appear under the Attributes & Abilities tab. Is there a way to prevent that? The game features a global variable that affect character rolls at all times. My understanding is that setting global variables can only be reliably performed with an API script, for example by duplicating said global variable across all characters. Is this correct? I can't figure out a way to use the same 1d20 result in separate formulas to display in a roll template. In particular, I need to care about the same d20 output compared to two different attributes. Is there a way to do so? Similarly, it is possible to show different information between players and the GM for the same roll?
1605440042
Finderski
Plus
Sheet Author
Compendium Curator
Probably would require a sheet worker, but if you could give a more concrete example (explain it like you would to a new player). Also, does 0 = blank? If you put it in a repeating section (aka fieldset) it won't appear in the Attributes &amp; Abilities tab. However, you'd need a way to unhide the section, so if you put that somewhere the players could access, then you have the same problem. If you're comfortable using Dev Tools in your browser, then you could create a repeating section that's hidden and uses the Dev Tools to reveal it. OR, more easily, just use the GM section on the Bio tab Probably, if that global variable is the same for EVERY character. Otherwise, you could just put a field for it on the character sheet and have each player update that field when necessary. You could also use a roll template to display the value of that field to ensure they updated it. Again, without a more concrete example, all I can say is maybe....check out this URL for what I think should work just based on the high-level info provided:&nbsp; <a href="https://wiki.roll20.net/Reusing_Rolls" rel="nofollow">https://wiki.roll20.net/Reusing_Rolls</a> Probably not, because it all has to be in the same roll template and you can't hide some parts of it and not others. This could potentially be done with the API, however. One aside, doesn't look like you're a Pro sub, and I'll just mention that custom character sheets are only available to Pro subscribers; if you're developing this outside of Roll20, you'll want to get access to Pro account at some point to do testing, because Roll20 is slightly different than standard HTML. Others have tried in the past to do character sheet dev without a Pro sub and it always ends horribly...more so if it's being done on an existing sheet that others are using, too.
Thanks for the help so far! I am indeed planning to get a Pro subscription to finalize the work - I'm just doing as much prep work as possible beforehand. I'm also sorry if I'm being vague on purpose, as players are not allowed to know most of the game rules and these forums don't appear to have spoiler tags. More details: Paranoia 25th Anniversary Edition has a system of Specialties and Weaknesses. If a character has the Specialty or Weakness corresponding to the task they are attempting, they roll it, otherwise they roll the corresponding base Skill instead. Valid values are between 1 and 20 in this context. One way to implement this would be to use a repeating fieldset, but it would be a bit less practical as most Specialties and Weaknesses are predefined and cover most tasks. As such, I was considering showing all of them instead despite the harder implementation. This is the solution used with the existing Paranoia XP character sheet, but it throws errors when players are not being careful. A sheet worker to fill in the gaps could definitely be used as a workaround, but it would be harder for players to plan around their character's strengths and weaknesses, and it increases the risk of accidentally erasing the data. Right now I'm thinking of going with the simpler repeating fieldset to mitigate that issue. The problem with the GM Notes field is that you can't use the data to calculate character-specific GM-exclusive rolls. For example, a player may have a Mutant Power and attempt to use it, but they can't know their mastery of it. As such, it's the same kind of rolls as above, but only the GM can perform it.This is why I was trying to come up with an alternative solution. Browser Dev Tools works for me, but it's annoying and would prevent non-technical GMs from using it. I did not realize repeating fieldsets don't show Attributes &amp; Abilities so at least there's that, but the implementation would be a lot more difficult however. This is a tricky one... Players can't update this global variable themselves as only the GM knows of its existence. To be exact, it's room-dependent. Secrecy aside, I'm not sure why it would be a problem to have an API script that overrides an attribute on all character sheets on command and manually modify it on each character sheet when they split up though? I believe these tricks for reusing rolls&nbsp;would solve this particular issue of mine. Thanks for the link! However, it may not be compatible with... ...the GM-only data display. Could having an API call that reuse the same dice roll but display different an additional GM-exclusive roll template be possible then? I didn't seem so from what I've seen, but I haven't studied the API system in-depth yet.
1605523033
Finderski
Plus
Sheet Author
Compendium Curator
I haven't messed around with this idea much, but...perhaps have a repeating section that is hidden (maybe? may not be necessary), you could set that up with all the fields necessary for your calculations. The button for that could be a gmroll that pulls info from the relevant character sheet. &nbsp;There are several ways to do that, for example, the target method (where you need to click the character's linked token) or when declaring an attribute you'd use&nbsp; @{Character Name|attributeName} Perhaps for the global variable, you could have the roll buttons on the character sheets reference a "GM Screen" type character using the attribute naming convention listed above. Without fully understanding the mechanic, of course, there could be issues with that. They'd be able to see the variable if they hover over the roll result, etc. There could maybe be ways around that depending on how that variable is used. Of course, some things may just have to be manual; how would it work in-person sitting around the table? If sitting around the table, the GM manually calculates the end result taking the variable into account, that may need to be good enough for a VTT, as well. (I hate to say that, but...) I'll keep giving this some thought and let you know if I have any other ideas that may be helpful. :)
1605540638
GiGs
Pro
Sheet Author
API Scripter
SmashManiac said: Thanks for the help so far! I am indeed planning to get a Pro subscription to finalize the work - I'm just doing as much prep work as possible beforehand.&nbsp; Bear in mind, if you havent paid very close attention to the wiki sction on building character sheets, its very easy to end up creating a sheet that you then have to completely start over from scratch, if you havent been testing it in roll20 as you go. The "do as much prep before hand" philosophy can end up creating more work, if you aren't already familiar with the differences between html-on-roll20 and html everywhere else. Most of your questions are a bit too vague to answer, we need to see actual code. But this one: 4. I &nbsp;can't figure out a way to use the same 1d20 result in separate formulas to display in a roll template. In particular, I need to care about the same d20 output compared to two different attributes. Is there a way to do so? This isnt possible on roll20 by default. Finderski pointed you to Reusing rolls, and it is likely possible to do what you need with that, but it's clunky. It would likely look like [[ [[ [[1d20]] + @{firststat} ]] -@{firststat} + @{secondstat}]] With this in a rolltemplate, you can then use $[[0]] to show the dice roll, $[[1]] to show the roll with first stat added, and $[[2]] to show the roll with the second stat added. This may not be as clear as I'd wish for, but I have no clue what your rolls look like, so cant be more specific. As I said, we need code to give good help.
1605545921
GiGs
Pro
Sheet Author
API Scripter
Rereading your questions more closely, I'm going to echo Finderski a lot. For question 1, this is not possible with a standard roll macro, but can be possible with a roll template or a sheet worker, so we'd need to know the specific details. For the questions about hiding information from the players-&nbsp; this isnt really possible without using custom API scripts (or as F suggests, using GM Notes which isnt ideal either). If you try to hide information on the character sheet, even through hidden repeating sections, players can discover it by analysing the sheet's html. So it's best to just trust them, or have the sheet have two modes: one tab for player sheet, and another tab for GM sheet, and on that GM sheet have a repeating section to add character names, and the values you want to track but dont want them to see. For the global value, you could have your rolls point to a GM sheet attribute, like @{GM|Global), and instruct people using the sheet that the GM needs to create a sheet called GM, and use that to track player stuff, for the campaign to work properly. Clunky but I think&nbsp; it would work, and doesnt require scripts.
Thanks to both of you for the suggestions so far and your concerns about potentially doing too much prep work. To clarify, right now I'm just trying to write a design doc, not do the actual implementation. Also, I did read the official documentation on this regard and studied existing character sheets from the Git repository to understand the limitations of the platform, hence all the questions. I guess I need to be more clear after all, so... PARANOIA SPOILERS ALERT - ULTRAVIOLET SECURITY CLEARANCE REQUIRED ---- Alright, so here are the issues that I'm trying to resolve. Paranoia is a game where all rolls are made on a single d20. Players pick a task, then the GM picks some attribute that corresponds best to said task, and if the d20 is equal or lower than the value of said attribute, it's a success, otherwise it's a failure. Attributes are integers from 1 to 20 and can sometimes be undefined, in which case the the roll defaults to some base attribute instead that is guaranteed to exist. Players may not know the values of some of these attributes, but know of their existence.&nbsp;This is generally all that players are aware of. In addition, there's a bunch of mechanics that players are not aware about during such a roll in some circumstances. There may be c riticals on 1 and f umbles on 20. There may be criticals when there's a difference of 10 or more as well. When firing a laser gun past 6 shots, the range of fumbles increases by 1 for every additional shot past that. When doing an action anywhere, if the dice result is lower than the room's Tension Level (a secret variable), the action is detected by an NPC and reported to the authorities if illegal, which gives them a number of Treason Points (a secret attribute that players are unaware of its existence) depending on the gravity of the crime. Players don't know their exact health values or those of their targets, the strength of weapons and armor, and how combat damage is calculated and applied after a successful roll beyond generalities. During normal gameplay, it's relatively easy for a GM to keep track of the hidden attributes and variables on a piece of paper, and the secret effects by simply looking at the value of the dice and performing a single subtraction for each target. Combat damage is a bit trickier, but the rules are designed in a way that GMs can just make up whatever they want if it gets too involved anyway. And of course, rolls based on attributes with secret values are rolled by the GM behind their screen. Now, let's consider a Roll20 implementation, and the issues I've ran into so far: How to default a roll to some predefined attribute when one does not exist. How to reasonably hide specific character attributes while allowing them to be used for GM rolls. (I'm fine with trusting players, but I at least want the value to be easily accessible by GMs without risking players to accidentally see it.) How to apply a given Tension Level to all player characters at once when necessary without being forced to do so one by one. How to validate if the Tension Level threshold has been reached for a given roll without forcing the GM to dig into the details of said roll to see the original 1d20 result. How to show possible crits, fumbles, and Tension Level alerts to the GM only. Hope it clarifies things. ---- END OF SPOILERS - INFRARED SECURITY CLEARANCE ACCEPTABLE PAST THIS POINT Note that I haven't took the time to ponder on the new suggestions so far - I'll update this thread once I do.
1605565932
GiGs
Pro
Sheet Author
API Scripter
How to default a roll to some predefined attribute when one does not exist. How to reasonably hide specific character attributes while allowing them to be used for GM rolls. (I'm fine with trusting players, but I at least want the value to be easily accessible by GMs without risking players to accidentally see it.) How to apply a given Tension Level to all player characters at once when necessary without being forced to do so one by one. How to validate if the Tension Level threshold has been reached for a given roll without forcing the GM to dig into the details of said roll to see the original 1d20 result. How to show possible crits, fumbles, and Tension Level alerts to the GM only. I'm not fully understanding question 1 - do you mean set a default value &nbsp;for an attribute, to be used if the player hasnt set a score in that attribute? If so you can do it by just setting a value="something" in the attribute definition, like &lt;input type="number" name="attr_strength" value="10"&gt; In this case whenever the player uses their strength value it will have a score if 10, unless they have manually changed it. For question 2, I dont think this is possible in a character sheet. You can do it with API scripts (requiring the GM to have a Pro subscription), but they'd be storing those attributes outside the character sheet. (PS: I've played paranoia - earlier versions-&nbsp; and I cant remember any situation where players would have attributes and not know what heir values are. Is this really necessary?" 3: not really possible in character sheet code. Again, its something you'd need an API script for. See my earlier reply though for a work around. 4. I'm not sure what you mean by this. If it helps, you can construct roll macros that display in chat different details - like the roll, the final score, what attribute was being used, who just rolled, and so on.&nbsp; 5. Your roll macros can be whispered to the GM, but players always see their own whispered messages. The other players wouldnt see the, but that one player sending the message would. There's no way to avoid this - a custom API script can get around it, but a character sheet can't.
For 1, to clarify, it's a system of Specialties and Weaknesses. If a player does not have said Specialty or Weakness, then their base attribute is used instead for the roll. For example, if a GM calls for a Demolitions check, and the character does not have Demolitions, they will roll Violence instead as it is the linked base attribute. In such a case, if Violence is leveled up after completing a mission, then Demolitions will follow as well. However, if the player has Demolitions as a Specialty or Weakness, then increasing Violence should not change the value of Demolitions. I don't know about versions of Paranoia before XP, but in XP and 25th Anniversary, Power (the mastery of a Mutant Power) and Access (the ability for a character to navigate Alpha Complex's bureaucracy) are hidden attributes, the idea being that it increases... well... paranoia. Plus, it allows the GM hide information players can't get, or to guarantee a funny situation. So while it's not necessary, it's kind of important. For 4, my issue is that I want to check a 1d20 against two target numbers simultaneously (the player's attribute and the Tension Level) in addition to crits and fumbles. The more that I think about it, the more I get the feeling that the best solution may to do a free-tier level similar to the existing Paranoia XP character sheet, and then maybe later also implement API scripts that do everything else. Not sure that's the direction I'm gonna go with, but it sounds like character sheets are simply not designed for secrecy...
1605589477
GiGs
Pro
Sheet Author
API Scripter
Character sheets are definitely not designed for secrecy.&nbsp; For 4, my issue is that I want to check a 1d20 against two target numbers simultaneously (the player's attribute and the Tension Level) in addition to crits and fumbles. I described a way to do this in my first post I think. For 1, to clarify, it's a system of Specialties and Weaknesses. If a player does not have said Specialty or Weakness, then their base attribute is used instead for the roll. For example, if a GM calls for a Demolitions check, and the character does not have Demolitions, they will roll Violence instead as it is the linked base attribute.&nbsp; Roll20 dice macros do not support conditional checks, like "if the character has demolitions, roll that; if not roll Violence". That can't be done with a standard macro. There are ways to work around it. Since youre designing your own character sheet, you can create a rolltemplate, which allows some limited processing of rolls.&nbsp; What you can do here is roll both &nbsp;violence and demolitions, and in your rolltemplate check if demolitions has a score, and if so, print that to chat; if not, print the violence roll instead. To everyone playing the game, it will appear that just one roll has been made - the relevant one.&nbsp; Another way is to have buttons on the sheet for each roll, and a sheet worker that calculates the value of each attribute. So if demolitions doesnt exist, it'll put the Violence score in the demolitions roll. If desired, the skills that aren't possessed can be hidden, so they aren't visible on the character sheet and taking up space, but their values will be in the sheet ready to be used as needed.
I had not considered this kind of workaround before. It's really ingenious, but I would feel kinda bad to put unnecessary stress on Roll20 by needlessly requesting double the dice throws. I also just finished looking on how the API system works. I did not realize everything was event-based and running in an isolated environment, so that makes it non-trivial to read and modify its state object manually. How would you suggest doing so, since you mentioned earlier that was possible?
1605694910
Finderski
Plus
Sheet Author
Compendium Curator
SmashManiac said: I had not considered this kind of workaround before. It's really ingenious, but I would feel kinda bad to put unnecessary stress on Roll20 by needlessly requesting double the dice throws. I wouldn't worry about that, Roll20 and many character sheets already do this by rolling things like Attack, Crit, and Damage rolls all together and then only displaying what applies.
1605747398
GiGs
Pro
Sheet Author
API Scripter
SmashManiac said: I had not considered this kind of workaround before. It's really ingenious, but I would feel kinda bad to put unnecessary stress on Roll20 by needlessly requesting double the dice throws. I also just finished looking on how the API system works. I did not realize everything was event-based and running in an isolated environment, so that makes it non-trivial to read and modify its state object manually. How would you suggest doing so, since you mentioned earlier that was possible? As Finderski says, dont worry about making multiple rolls. This is standard practice and isnt going to affect your game's performance. I dont really understand your question about reading and modifying state - you dont need to do anything like that to make a roll. The problem is, you'd need to make a custom API script to handle the roll, and check which attribute value to use. You';d be writing that script to replace the normal dice macro. If you know javascript this is easy enough. But if you intend your sheet to be used by the community (and not just your own group), it's best to avoid that - only games with a Pro subscriber GM can use API scripts, and character sheets should be usable by free users.
Sorry, I was unclear again. I was talking about how to read and set variables while making them unavailable from a character sheet but still have them available for a GM roll, and I was considering using the state object from API scripts as a workaround, but could not think of a proper I/O pipeline. Now that I thought about it more, Finderski's suggestion about implementing a dedicated GM sheet, and it could be expanded for such a pipeline as well. I kinda hate to do that because it partially breaks the OOP encapsulation principle, but if that's the only way to do it... Also, I wasn't concerned about my game's performance with the additional rolls, but the added stress on Roll20's backend, as I have no idea how much extra Quantum Rolls costs them and I don't want to waste their resources. I guess it's indeed not that big of a deal, but still... I'm fine with Javascript by the way - I'm a professional software developer with 10+ years of experience. I even built my entire blog in Node.js and Nunjucks, the latter which I'm planning to use for this project as well to avoid copy-paste maintenance issues. I think at this point all of my original questions have been answered, and I have a pretty good idea on how to best go forward. Thanks a lot for all your help and suggestions! I'll complete my design document and we'll see what happens from there!
1605773791
Andreas J.
Forum Champion
Sheet Author
Translator
SmashManiac said: Also, I wasn't concerned about my game's performance with the additional rolls, but the added stress on Roll20's backend, as I have no idea how much extra Quantum Rolls costs them and I don't want to waste their resources. I guess it's indeed not that big of a deal, but still... Pretty sure that's no concern at all, given the examples you gave. I think at this point all of my original questions have been answered, and I have a pretty good idea on how to best go forward. Thanks a lot for all your help and suggestions! I'll complete my design document and we'll see what happens from there! Great to hear! As a professional software developer, what's your opinion on the community-created documentation related to Building Character Sheets ?
ᐰndreas J. said: As a professional software developer, what's your opinion on the community-created documentation related to Building Character Sheets ? Keep in mind that I can't judge whether the content is accurate or not since I have yet to try it. That said, the content that is there appears to be of great quality! I like that there's lots of technical details about almost everything, along with tips, tricks and examples! The fact that I'm able to have these technical conversations without even trying to implement anything yet is proof of that. My two main gripes are that I often have trouble figuring out where the information is (this is slightly better on the Help Center compared to the Wiki IMO) or if it does at all (it usually does), and that behaviors when not using components the way they were designed for are not clearly documented. Other issues are that there's also some content that are marked as outdated, and that the Help Center version is sometimes not properly formatted. It sounds like you wrote a good chuck of the documentation so kudos! In fact, I'm surprised this appears to be mostly community-driven and not produced by a Roll20 technical writer!