Digital Squire - A software player aid with tight D&D Insider integration

Asmor

First Post
I've just released Digital Squire 1.0, a virtual character sheet meant to be used at the game table. It loads characters made from the DDI character builder, looks up things for you on the compendium, and keeps track of your powers, your hit points, and everything else for you!
 
Last edited:

log in or register to remove this ad



Wow. Very, very nice. Downright freakin' awesome, in fact.

Does it maintain (repeatedly re-auth) the Compendium access for you, so you don't time out? Hard to tell since I checked it while logged in and didn't use it throughout a session.

Some notes and ideas for you:

1) It would be really nice on the Powers screen to have a visual indicator of expended encounter & daily powers. Maybe drop the text to grey and the colour highlight to a paler version of the same red/charcoal colour, so it's still easily identifiable but also easily spotted?

2) I want to be able to set it to accept double-click as "Yes, use this power. Yes, with my default weapon. Yes, roll for me." The Swordmage I tested it on kept having to confirm that yes, he wants to use his magic sword, not the mundane daggers he keeps around for RP purposes. It's not like this is in question - and if it is, if only doubleclick is changed then he can still use the Use/Recover button to get at the current dialog. [I'd also prefer that double-click did not trigger Recovery. Leave that, once again, to the slightly-less-intuitive button press.] Alternately, put those lovely little dice icons from the Skills/Stats page beside the powers too, and use single-click on the die to do the "fast activate" command like this.

3) Close and Area powers currently only provide you with a single attack roll. Per the rules we should get multiple attack rolls but only a single damage roll. To handle that here would take multiple "uses" of the power - particularly troublesome if it's an Encounter or Daily - and meanwhile remembering to only use the damage roll result from the first one. Definitely a necessary fix. Suggested fixes:[sblock]The easy way would be this: the results page brings up the first one, or maybe up to three, attack rolls automatically. But nearby there's a "Number of Targets?" numeric entry box. Entering a number here causes the results page to reevaluate, same damage roll and first 1 (or up to 3) results, but additional results up to nTargets. If you want to get fancy: [sblock]...And easier to arbitrate at the table, a cooler way to do it would be with a diagram grid of checkboxes. For a Blast 3, show a 3x3 grid, and so forth. Clicking a box causes it to (a) show an indicator in that square to show it's been selected, and (b) show the attack roll result there. If you made the grid big enough that you could show a little monsterface silhouette as the indicator, with the attack total superimposed in white, that would be pretty much perfect. Glance at board, click each target, and you get attack totals unambiguously tied to who's who on the map.

If using this technique, I would suggest not providing the first 1-3 results prior to clicking on the grid... because that would provide temptation to select who you click on based on having already seen those results. One click to bring up the grid and then N clicks for N targets ain't half bad anyway.

For orientation, try this: one edge of the grid is prominently labeled "DM". You can slide him to any edge of the pattern, and the code will remember which and use that as its default from then on out.

For extra bonus points, clicking an already-revealed indicator brings up the "Plus" panel (see my suggestion at the end of this post) so that they can customize it in this instance... such as when you're applying Curse damage to one out of ten targets in the blast. Happens a lot and would be annoying to have to do in one's head.

To deal with big blasts or bursts (such as some of the "Close burst 20: All allies in burst" powers), make the grid small but when you click a square on the grid, "magnify" it up to a square of sufficient size, overlaid over the grid, centered on the original square. Folks are gonna be approximating locations when the thing is that size anyway, they just need readability and a way to show approximate relative locations.

Oh, and check for the specific phrase "One _____ in burst." If this is present, do not bring up the Burst/Blast grid. Treat simply as a single-target power, just like a Ranged attack. IMO they should just have established that "Close 5" means the same as "Ranged 5" except it doesn't provoke; none of this "Close Burst 5"/"One target in burst" nonsense.[/sblock][/sblock]4) How hard would it be to grant "customize me" access to the powers? For example, in my campaign Assault Swordmages get the equivalent of Martial Training (Int) for free, when using their Aegis basic attack. Would be tricky to do in your setup as-is. This would also allow your DM to code in the basics of new / custom powers. Suggestion:[sblock]Just grant the ability to alter or enter (a) the power name, (b) the attack (stat, presence of weapon/implement keyword, static bonus), and (c) the damage roll (dice, stat(s), static bonus).

Obviously you presumably wouldn't be editing the .dnd4e file, but instead saving this info in your .dsq file.

Hm - since Digital Squire doesn't currently have a levelling-up functionality, we'd need some way to manage continuity between a saved character state and a levelled-up .dnd4e file. Though I suppose that's kind of desired anyway, since I (for one) let players level-up during short rests, so their character state may need to carry over anyway.[/sblock]5) There seems to be a bug in Second Wind - clicking it while checked brings up the Healing panel, but the Second Wind checkmark only actually clears if you hit Cancel on the healing dialog, not if you hit Apply.

6) After you enter a damage amount, you need to click Add Damage. Intuitively, if the damage line has focus, enter should do the same thing as clicking Add Damage.

7) Another bug - Some powers (such as Firepulse) need to interface like attack powers, not utilities, even though DSQ currently files them as Utils. I suggest using the presence of an "Attack:" line, rather than the listed designation, as the toggle for whether or not it's a utility power. In any event, the empty "Use which weapon" blank is disorienting when the power intrinsically cannot do so (as with Firepulse) or the question is simply meaningless (as with Second Chance). Ideally, if a confirmation is required, at the very least grey out the entire "Use which weapon" area including its title, when it's not relevant.

8) In a few trials, I was seeing pretty bipolar results from your RNG... many more 1's and 20's than I would expect. You should probably run a histogram check on it to make sure the code's giving you an appropriately random distribution of final d20 results.

--------------------------

I have several players who would definitely, definitely use this. And it would speed up my combats considerably - woot!

Doubly so if you could do a mobile port of this; I dunno how doable that is on the backend (this is, what, a .net thing, using the DDI lookup to establish the parameters of the die rolls etc?), but if it is indeed doable it would be a very big plus. [Mobile version presumably has the things which are currently subpanels take up the whole screen, possibly with data from the main page - such as HP data onto the healing panel - imported for access here. DDI lookup would presumably just be absent, or if doable would again be new-screen-with-back-button style.]

If you get those bugs listed above squashed, and the single big thing of not having to repeatedly say "Yes, my primary weapon, not my boot knife!", then I will straightaway hand this to my players. I can see it massively speeding up play...


Oh, and here's a thought. Beside each power place a die icon (as above), and a plus-sign icon beside the die. Two individually clickable objects.[sblock]The die rolls the power straight up, with the default applicable weapon/implement and no mods. The plus brings up a panel with the following on it:
- Checkboxes: "Combat advantage", "Cover", "Concealment". The latter two are three-state boxes... one click and it's a checkmark, second click and it's an X and the text beside it expands to read "Superior Cover" or "Total Concealment". Third click clears it back to normal.
- Checkbox if class feature present: "Sneak Attack" (autochecks to true when the player checks Combat Advantage above), "Quarry Damage", "Curse Damage", "Oath of Enmity." Appropriate dice/rerolls get auto-included in the results roll.
- Two numeric-entry and/or dropdown list boxes, near a heading "Situational Bonuses." One for "Attack bonus" and one "Damage bonus". Net penalties should appear here too (or be enterable here). The nicest way to do these would probably be for each of these to be a cluster of five controls: on the left, a big left-pointing arrow which decrements the value in the center box by 2 (starting from zero if blank), then a smaller left-pointing arrow which decrements by 1 in the same fashion, then a text-entry box, then +1 and +2 right-pointing arrows similar to those to the left of the box. This would help a lot when stacking bonuses and penalties for some net effect. The +/-2 ones could easily go if there's clutter, they just seem to be a very common unit of bonus or penalty (not just DMG p.42, but also Lance of Faith and various other powers - plus/minus two seems to be one of their defaults).
- Enter number of targets (for close/area powers) in a box here at the end, or click them on the burst/blast grid if you're using that approach. This way you get all your "interact with the power" done at one pass.

- A "Roll" button at the bottom. Mapped to Enter, except in the specific circumstance where the user is currently focused on a numeric-entry box (the Situational Bonus ones), in which case Enter simply accepts the value in the box and defocuses it without triggering the Roll button overall. Obviously a "Cancel" button as well, but you know that.

The reason I strongly suggest this approach is that many players have trouble integrating a tool with their brains... by which I mean, if the program does 95% of the work for them, then when they get the program result and have to add a further +1 for Bless and +2 for CA (or whatever), they will (a) often forget to do so entirely, and (b) be much slower doing so than they would have been if they'd been doing it all without the tool - the net time cost can actually end up being greater due to this effect.[/sblock]------------------

This post is long not because I think your work is full of flaws. Quite on the contrary - I think it's full of AWESOME and spent far more of my workday than I should have writing out these suggestions on how to make it even better.

I don't directly code .NET, but I'm generally code-aware (just not in that specific language), am pretty good with interfaces and usability stuff, and have an Origins award for game design sitting on my shelf, so if you need help with anything on those levels - just PM me. This is a really terrific product you've got going here, and I'd be more than happy to help.
 
Last edited:

Oh, and... if you gave me graphic templates for each of the three tab screens and the various panels, with origin coordinates set appropriately, I'd do you up at least one shiny skin for it, too - even just a PNG with transparency over the places where results can go, plus maybe font control, would go a hell of a long way.
 

Damn, you wrote it in .NET...

I have a tool I wrote that combines networked mapping with combat tracking (even a new feature that keeps track of all to-hit values between attacker and target, including temporary effects!) but the one thing that irks me is having to keep track of stats and I have had auto-import of Charbuilder sheets on the cards for a bit now.

But its in Java! Doh!
 

1) It would be really nice on the Powers screen to have a visual indicator of expended encounter & daily powers. Maybe drop the text to grey and the colour highlight to a paler version of the same red/charcoal colour, so it's still easily identifiable but also easily spotted?

I just tested it out and it's broken. It's supposed to be putting the powers down at the bottom in a completely separate group. I must have broken that at some point and missed it. Will fix it right after I finish posting this... If you got the auto-updating version, it should... uhh... auto... update. Yeah.

2) I want to be able to set it to accept double-click as "Yes, use this power. Yes, with my default weapon. Yes, roll for me." The Swordmage I tested it on kept having to confirm that yes, he wants to use his magic sword, not the mundane daggers he keeps around for RP purposes. It's not like this is in question - and if it is, if only doubleclick is changed then he can still use the Use/Recover button to get at the current dialog. [I'd also prefer that double-click did not trigger Recovery. Leave that, once again, to the slightly-less-intuitive button press.] Alternately, put those lovely little dice icons from the Skills/Stats page beside the powers too, and use single-click on the die to do the "fast activate" command like this.

Good idea. Will get to it, though the next revision is going to be just bug fixes like the above.

3) Close and Area powers currently only provide you with a single attack roll. Per the rules we should get multiple attack rolls but only a single damage roll. To handle that here would take multiple "uses" of the power - particularly troublesome if it's an Encounter or Daily - and meanwhile remembering to only use the damage roll result from the first one. Definitely a necessary fix. Suggested fixes:[sblock]The easy way would be this: the results page brings up the first one, or maybe up to three, attack rolls automatically. But nearby there's a "Number of Targets?" numeric entry box. Entering a number here causes the results page to reevaluate, same damage roll and first 1 (or up to 3) results, but additional results up to nTargets. If you want to get fancy: [sblock]...And easier to arbitrate at the table, a cooler way to do it would be with a diagram grid of checkboxes. For a Blast 3, show a 3x3 grid, and so forth. Clicking a box causes it to (a) show an indicator in that square to show it's been selected, and (b) show the attack roll result there. If you made the grid big enough that you could show a little monsterface silhouette as the indicator, with the attack total superimposed in white, that would be pretty much perfect. Glance at board, click each target, and you get attack totals unambiguously tied to who's who on the map.

If using this technique, I would suggest not providing the first 1-3 results prior to clicking on the grid... because that would provide temptation to select who you click on based on having already seen those results. One click to bring up the grid and then N clicks for N targets ain't half bad anyway.

For orientation, try this: one edge of the grid is prominently labeled "DM". You can slide him to any edge of the pattern, and the code will remember which and use that as its default from then on out.

For extra bonus points, clicking an already-revealed indicator brings up the "Plus" panel (see my suggestion at the end of this post) so that they can customize it in this instance... such as when you're applying Curse damage to one out of ten targets in the blast. Happens a lot and would be annoying to have to do in one's head.

To deal with big blasts or bursts (such as some of the "Close burst 20: All allies in burst" powers), make the grid small but when you click a square on the grid, "magnify" it up to a square of sufficient size, overlaid over the grid, centered on the original square. Folks are gonna be approximating locations when the thing is that size anyway, they just need readability and a way to show approximate relative locations.

Oh, and check for the specific phrase "One _____ in burst." If this is present, do not bring up the Burst/Blast grid. Treat simply as a single-target power, just like a Ranged attack. IMO they should just have established that "Close 5" means the same as "Ranged 5" except it doesn't provoke; none of this "Close Burst 5"/"One target in burst" nonsense.[/sblock][/sblock]

You've given me some ideas I'll look into. Unfortunately, I simply do <i>not</i> have access to the details for the powers. All I have is what's in the .dnd4e file, which isn't much...

4) How hard would it be to grant "customize me" access to the powers? For example, in my campaign Assault Swordmages get the equivalent of Martial Training (Int) for free, when using their Aegis basic attack. Would be tricky to do in your setup as-is. This would also allow your DM to code in the basics of new / custom powers. Suggestion:[sblock]Just grant the ability to alter or enter (a) the power name, (b) the attack (stat, presence of weapon/implement keyword, static bonus), and (c) the damage roll (dice, stat(s), static bonus).

Obviously you presumably wouldn't be editing the .dnd4e file, but instead saving this info in your .dsq file.

Hm - since Digital Squire doesn't currently have a levelling-up functionality, we'd need some way to manage continuity between a saved character state and a levelled-up .dnd4e file. Though I suppose that's kind of desired anyway, since I (for one) let players level-up during short rests, so their character state may need to carry over anyway.[/sblock]

I may implement something to add in powers in the future, but I can't really guarantee that. My primary goal with this is to just open files from the character builder, and nothing more.

5) There seems to be a bug in Second Wind - clicking it while checked brings up the Healing panel, but the Second Wind checkmark only actually clears if you hit Cancel on the healing dialog, not if you hit Apply.

Thanks, will fix that.

6) After you enter a damage amount, you need to click Add Damage. Intuitively, if the damage line has focus, enter should do the same thing as clicking Add Damage.

I agree, though I can't say when this will be the case... It's possible-- but non-trivial-- to do this in .Net.

7) Another bug - Some powers (such as Firepulse) need to interface like attack powers, not utilities, even though DSQ currently files them as Utils. I suggest using the presence of an "Attack:" line, rather than the listed designation, as the toggle for whether or not it's a utility power. In any event, the empty "Use which weapon" blank is disorienting when the power intrinsically cannot do so (as with Firepulse) or the question is simply meaningless (as with Second Chance). Ideally, if a confirmation is required, at the very least grey out the entire "Use which weapon" area including its title, when it's not relevant.

As I mentioned above, I don't have any information about whether a power is an attack power or not. At the moment, a power is labeled as an attack power if it has at least one weapon associated with it, and a utility power otherwise.

Theoretically I could lookup the level the power was gained (NOT the power's level, which is impossible for me to find), but even that is both extremely difficult and not perfect (e.g. if you gained a utility power at level 15 through a feat or retraining, that's a daily attack power level).

8) In a few trials, I was seeing pretty bipolar results from your RNG... many more 1's and 20's than I would expect. You should probably run a histogram check on it to make sure the code's giving you an appropriately random distribution of final d20 results.

I've noticed something similar, but didn't do much testing so just chalked it up to randomness. I'm using the Mersenne-Twister algorithm, which is supposed to be good...

One thing I've considered is having an option to use the Quantum Random Bit Generator Service to generate true random numbers, but there are some complications to using that as well (i.e. you need to log in to their service, and should I use my own credentials or require each user to create an account and log in under their own?)

Doubly so if you could do a mobile port of this; I dunno how doable that is on the backend (this is, what, a .net thing, using the DDI lookup to establish the parameters of the die rolls etc?), but if it is indeed doable it would be a very big plus. [Mobile version presumably has the things which are currently subpanels take up the whole screen, possibly with data from the main page - such as HP data onto the healing panel - imported for access here. DDI lookup would presumably just be absent, or if doable would again be new-screen-with-back-button style.]

I don't have any intention of making a mobile version. Sorry.

- Checkboxes: "Combat advantage", "Cover", "Concealment". The latter two are three-state boxes... one click and it's a checkmark, second click and it's an X and the text beside it expands to read "Superior Cover" or "Total Concealment". Third click clears it back to normal.

I think I can do something like this...

- Checkbox if class feature present: "Sneak Attack" (autochecks to true when the player checks Combat Advantage above), "Quarry Damage", "Curse Damage", "Oath of Enmity." Appropriate dice/rerolls get auto-included in the results roll.
- Two numeric-entry and/or dropdown list boxes, near a heading "Situational Bonuses." One for "Attack bonus" and one "Damage bonus". Net penalties should appear here too (or be enterable here). The nicest way to do these would probably be for each of these to be a cluster of five controls: on the left, a big left-pointing arrow which decrements the value in the center box by 2 (starting from zero if blank), then a smaller left-pointing arrow which decrements by 1 in the same fashion, then a text-entry box, then +1 and +2 right-pointing arrows similar to those to the left of the box. This would help a lot when stacking bonuses and penalties for some net effect. The +/-2 ones could easily go if there's clutter, they just seem to be a very common unit of bonus or penalty (not just DMG p.42, but also Lance of Faith and various other powers - plus/minus two seems to be one of their defaults).

This may be doable.

This post is long not because I think your work is full of flaws. Quite on the contrary - I think it's full of AWESOME and spent far more of my workday than I should have writing out these suggestions on how to make it even better.

Oh, no, thank you very much! These sorts of comments and suggestions are enormously helpful to me!

Oh, and... if you gave me graphic templates for each of the three tab screens and the various panels, with origin coordinates set appropriately, I'd do you up at least one shiny skin for it, too - even just a PNG with transparency over the places where results can go, plus maybe font control, would go a hell of a long way.

I appreciate the offer but I'll pass. I'm apparently really weird in my disdain for custom look-and-feels... I hate skinned applications, and my first order of business when using one is to try and find a Windows theme...

Damn, you wrote it in .NET...

I have a tool I wrote that combines networked mapping with combat tracking (even a new feature that keeps track of all to-hit values between attacker and target, including temporary effects!) but the one thing that irks me is having to keep track of stats and I have had auto-import of Charbuilder sheets on the cards for a bit now.

But its in Java! Doh!

Unfortunately, most of the character import stuff was done in LINQ, which is probably one of the few major differences between C# and .Net... You're welcome to the source code, though, if you'd like to try and do something with it.
 

Just wanted to say that the powers are now expended correctly... Make sure you get the auto-updating version (that's the big link); I don't update the standalone version as frequently.

I'd broken it in the process of working in spellbooks, which I might add was a huge pain in the ass for a single class feature... >_>
 

Asmor said:
You've given me some ideas I'll look into. Unfortunately, I simply do not have access to the details for the powers. All I have is what's in the .dnd4e file, which isn't much...
Hm. Yeah. But the burst/blast thing is a real killer for its usability - for example, the two players of mine who most need it are arguably the wizard and the swordmage, both of whom have lots of each.

In terms of distinguishing between utility and attack powers, a couple of notes from perusing the XML by hand:[sblock]First, although it will not help for racial powers, it appears that you can effectively tell at what level a power was gained, in a meaningful way. If the <Level> object includes a <RulesElement> gained by retraining, then that RulesElement contains an attribute replaces="nNnNnnN". The contents here match the charelem gibberish code corresponding to the power which they no longer have. Thus you can tell what effective level something was gained at by following that chain back. I'm guessing that you can usually do the same for powers gained from feats, most of which are either (a) a Channel Divinity power, or (b) literally or effectively (cf. Spiked Chain Expert and its kin) a power-swap feat.

If you care enough to do so.

However, I'm not sure it's necessary. I assume you wrote your code to discard the <Weapon name="Unarmed"> that the character builder inserts into the power descritions, yes? Because the Firepulse power, my example here of an attack power with no associated weapon, does actually have its attack stats listed in the <Power> block. However, because it's got no associated weapon, the only "Weapon" entry is the unarmed one. So if you tweak it from (ignore the <Weapon name="Unarmed"> entry) to add (...except if it's the only <Weapon> listed for that power), then you should catch Dragon Breath, Firepulse, Earthshock and so forth just fine.[/sblock]
This still doesn't cover the Burst/Blast thing, though, just the question of what's an attack. I have a good (and hopefully easy) idea for this. Add a "?" button beside the powers, and/or a menu item "Add info about this power" or the like. (A right-click context menu with "Use", "Recover", "Add info" and similar would actually be ideal here.) This brings up a panel which allows the user to enter at least the following information:
  • Is this a utility power or an attack power?
  • What is the area of effect of the power - which could include the following radio buttons:
    • Single Attack Roll
    • N attack rolls (which covers Twin Strike etc) - note that by the rules these almost always call for separate damage rolls, unlike bursts / blasts.
    • Burst [M]
    • Blast [N].
    Both of the latter then trigger the target-selection grid I described, either [2M+1]x[2M+1] or [N]x[N] as appropriate, when the power is used.
(This would, of course, be a perfect opportunity to allow them to enter more information than this, such as customizing various details, but I'd leave that on the TBD list for now.) Now, before you worry about the data storage for this additional information, read on. The perfect solution follows at the end of this post.

Asmor said:
[Re: the RNG...] I've noticed something similar, but didn't do much testing so just chalked it up to randomness. I'm using the Mersenne-Twister algorithm, which is supposed to be good...
In my experience virutally all RNG issues are coding bugs with what you do with it after the RNG, not with the RNG itself. An innocent scaling error being Ceiling'd into the 1-20 range, for example. Best way to test it is just to insert a nice big for loop, tally d20 outcomes exactly as though they were being reported to the player, and take a look at the distribution that results.

Asmor said:
[Re: skinning] I appreciate the offer but I'll pass. I'm apparently really weird in my disdain for custom look-and-feels... I hate skinned applications, and my first order of business when using one is to try and find a Windows theme...
I may have miscommunicated here. I'm with you - I loathe the whole fetish for custom skinning by the users. However, where I disagree with you is on wanting a plain vanilla Windows interface; I strongly prefer it when the designer himself ties the aesthetics to the function as much as possible, creating a pleasing interface whole. The Character Builder is actually not a bad example here, quite mild in its deviations from vanilla yet enough to let me tell at a glance which application I'm looking at, and to keep my mindset from being jarred out of the gaming groove. It's like flavour text on powers... technically it adds nothing, and yet it matters.

But if, as the designer, you want the single look&feel to be vanilla Windows, so be it. If I really decide I care, I'll beg the source code and learn enough .Net to give myself a version that pleases me more.


------------

Now. Biggest and coolest idea I've hit for you yet.

Screw the .dsq format. Write state information, and other provided information, to the .dnd4e file directly. How? Easy. Use the Journal.

You can name a Journal entry anything you want (I've just done a text one up labeled "Digital Squire Data"). You can't put XML inside it directly - it parses the brackets into < and > objects, which I'm very glad to see in general. But you can put text-form data of any other kind you like, in there (it even preserves redundant whitespace and carriage returns), and I'm not (so far) seeing a length limit.

This means that the player can take the character away, level them up, and come back... and Digital Squire will still have their damage, powers spent, and so forth tracked from where they were. Presto.

This also makes far, far easier the "User entered data" about powers I mentioned above. The .dnd4e file isn't giving you something? Let the user enter it once, and then store it in the Digital Squire Data journal entry.

Later on, in fact, you might opt to write a master "Fill in all necessary extra information using DDI" button, which goes through and identifies all powers without (e.g.) a Number of Rolls entry inside your private data, and does a DDI Lookup and string-parse on each of them to extract that information in the background. But frankly this is a bonus, not a necessity, as long as we're able to tell DSQ what it needs to know to handle the powers properly in play.
 

I'm a little leery of touching the dnd4e files... One screw up on my part, and someone could lose their character. I'm pretty haphazard with my coding for personal projects like this (see, for example, how I'd broken the functionality of powers being expended before release and didn't test it...). I agree with you that it is a cool idea... but it's just a whole can of worms I don't want to get into.

At some point in the future I probably will add in the ability to edit powers, and also to try and grab as much info as I can semi-automatically from the compendium (much like my new version of Monster Maker imports monsters from the compendium, but I can't really give an ETA.
 

Remove ads

Top