create account

The story of my seemingly-cursed lightweight virtual tabletop for RPGs project(s) by danmaruschak

View this thread on: hive.blogpeakd.comecency.com
· @danmaruschak ·
$41.09
The story of my seemingly-cursed lightweight virtual tabletop for RPGs project(s)
Most of my tabletop roleplaying gaming is done online. I started playing via Skype after being inspired by an Actual Play podcast who played games over Skype. Back when I started there were some virtual tabletop applications available, but they all had drawbacks (for example, some of them were standalone apps so there could be problems if you had some players on Windows machines, some on Macs, and some on Linux). Regardless, for the kinds of games we played we often didn't need any kind of virtual tabletop (I wasn't playing any games with grid-and-minis combat, for example) and we figured that since we could just roll physical dice locally to play we should do that and not worry about the hassle or distraction of an extra program.

When Google launched Google+ and Hangouts I eventually migrated over to gaming via Hangouts video chat. I still preferred to rely on rolling physical dice locally, and that worked fine for the games I was playing. There were some new virtual tabletops that came out, [Roll20](https://roll20.net/) being the biggest. To my eyes it had some downsides: it seemed to be focused on “map” style play, for games like combat-focused D&D, which wasn't the kind of game I played. And I had a snobbish dislike for how it didn't seem to have the “production values” you'd get in a 2D video game, the look-and-feel didn't appeal to me. Because I didn't need to use it I didn't pay much attention.

# Dogged perseverence

Eventually I formed an online group with the intention of playing _Dogs in the Vineyard_ over Hangouts. While this doesn't use any kind of combat maps it does have a complicated dice mechanic where you roll big pools of dice and it's important to know which dice the other players have “on the table” in front of them. I knew from previous experience that you could do this with locally-rolled dice and just taking notes as other players read off their dice results, but one of the players convinced us that we should try _DiceStream_ based on his previous experience. Rather than a map-focused experience, _DiceStream_ was just focused on dice-rolling, and rather than taking the focus away from the other players it used the clever technique of superimposing the dice results over the video feed of the player rather than making the virtual tabletop a separate window or panel. Once we tried it I had to concede that it was a better way to pay this particular game. There was one problem, though, which was that because of a design choice in how the program displayed d6s it was hard to use in exactly the way we wanted to.

Since I had done some programming (and some 2D game programming in particular) I decided to see how hard it would be to make a tool that did the same thing as _DiceStream_, but didn't have the quirk that was causing our headache with using the d6s the way we wanted to with _Dogs in the Vineyard_. I didn't copy the code, but replicated the functionality, plus added a few extra features for the particular game. I released it as its own Hangouts app, _Dice in the Vineyard_:

![DiceInTheVineyardBetaScreenshot.PNG](https://steemitimages.com/DQmZQz3DRavTBrVLpRr2bzggjQPRhgzxg3Fby1XipRd9uFR/DiceInTheVineyardBetaScreenshot.PNG)

# Specific to general

The player who suggested we try Roll20 in the first place noticed that one of the features I added would also be convenient for him if he used this tool when he was playing a _Burning Wheel_ game with his other group. He also requested another minor feature, which I implemented since it wasn't much trouble. After our campaign of _Dogs in the Vineyard_ wrapped we decided to start playing _My Life with Master_. The dice mechanics in that are pretty straightforward, but they do call for a few dice with different colors. I decided that since I had already started down the path of generalizing _Dice in the Vineyard_ with features for other games I should just go all-in and make a full-featured dice rolling lightweight virtual tabletop. It took a little while, but I eventually got _RPG HUD_ working (the idea behind the name being that the “overlay over the video” functionality would let you keep your “heads up” while playing the RPG rather than staring at a separate virtual tabletop window). I also had some other ideas that were partially implemented, such as “token drawing” functionality to support games like @paulczege's [The Clay That Woke](http://halfmeme.com/clay.html).

![RPGHUDScreenshotMatrix.png](https://steemitimages.com/DQmUxw9qFCC2nNicWDVBL8dxnz7XSdA7Sjm1VdGWE3Erjfb/RPGHUDScreenshotMatrix.png)

# What else was in the cards?

With the experience of implementing dice-rolling functionality in a lightweight virtual tabletop, I realized that there were some card-based RPGs that were hard to play online. I figured that I should be able to take what I had learned by creating _RPG HUD_ and make a lightweight VTT for cards, the working title was _Cardinal_.

![CardsOnScreenScreenshot.PNG](https://steemitimages.com/DQmf9aUFtHoxLEQbwXmyR2az1quDYCXFrXRXRvZHGHcVSEG/CardsOnScreenScreenshot.PNG)

# Life finds a way. Unless it's a Google product, then end-of-life finds a way.

However, these projects got totally derailed when Google announced they were going to end-of-life the API functionality that let tools like _RPG HUD_ and _Cardinal_ integrate with Google Hangouts. This was very disappointing, since I had ended up putting a significant amount of time and energy into these projects by that point. Also, I suspected that this would be a pretty big blow to Hangout gaming in general since a lot of people had seemed to be using some types of Hangouts API to assist their gaming (not many people were using mine yet, but I was still optimistic).

As something of a coincidence, I had started investigating how to code a Chrome extension for a different project. But one feature of a Chrome extension lets you do is create a little “popup” window that hovers over your browser window. It occurred to me that if you were running a Hangouts session in your browser and an extension popped open one of these windows it would be _very_ similar to what I had been doing with the “overlays” in _RPG HUD_. So a new _RPG HUD_ was born. Since it wasn't showing the dice via the video feed anymore it needed an actual communication mechanism to tell the other players' instances of the app which dice to show on your part of the table. I didn't want to have to run my own server to coordinate messages, to I decided to use Google's _Realtime_ API, which was a generalization of the functionality that makes realtime collaborating in a GoogleDoc possible. I got a prototype up and running, and it seemed like it was working.

![New RPGHUD with video.png](https://steemitimages.com/DQmdAbprhMmBd56CsGNTGVcn75PPHx4vXoHyCnCKBm84VNM/New%20RPGHUD%20with%20video.png)

# Party on? Not so much.

However, I had been putting a lot of time and energy into this project without much to show for it, so I decided to start a Patreon to support development. It didn't get a lot of support. I had tried to keep my expectations low (especially since I'm really bad at self-promotion), but I was really deflated by the lack of interest. It basically killed my motivation to work on the project, so it was essentially shelved. 

# End-of-life me once, shame on you...

I've never been part of the open-source scene, but when I saw the Utopian-IO buzz starting it occurred to me that it might be worthwhile to take this version of _RPG HUD_ out of mothballs and see if I could make it into an open-source project suitable for Utopian-IO – I couldn't get money for developing it through Patron, but maybe I could get some Steem rewards for it. However, a few days ago when I went to check out the state of the [Realtime API](https://developers.google.com/google-apps/realtime/overview) I was amused/dismayed to see that yet another Google product is being end-of-lifed out from under me:

![RealtimeDeprecation.PNG](https://steemitimages.com/DQmeYr6DWjiDFS19AMenE5eSMXyJxyeb2R4g8Nc3zZ4K5MR/RealtimeDeprecation.PNG)

If I do want to resurrect the project I'll need to find another communication backbone. Realtime wasn't perfect anyway, since there were no ideal methods for guaranteeing atomic operations (useful for stuff like moving a token from one stack to another while a different player might be trying to grab it), but I'm not sure it would be worth the effort to ramp up on a whole new method. I briefly looked at some chat APIs like [Discord](https://discordapp.com/) to see if might be easy to use that, but it seems like their consistency models are even looser than the Realtime one. Right now I think the project is likely to remain dead, except as this tale-of-woe blog post, but I do hate it that I have all this code I worked on that's essentially going to waste.
👍  , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , and 215 others
properties (23)
authordanmaruschak
permlinkthe-story-of-my-seemingly-cursed-lightweight-virtual-tabletop-for-rpgs-project-s
categorytabletop-rpg
json_metadata{"tags":["tabletop-rpg","gaming","apps","rpg","blog"],"users":["paulczege"],"image":["https://steemitimages.com/DQmZQz3DRavTBrVLpRr2bzggjQPRhgzxg3Fby1XipRd9uFR/DiceInTheVineyardBetaScreenshot.PNG","https://steemitimages.com/DQmUxw9qFCC2nNicWDVBL8dxnz7XSdA7Sjm1VdGWE3Erjfb/RPGHUDScreenshotMatrix.png","https://steemitimages.com/DQmf9aUFtHoxLEQbwXmyR2az1quDYCXFrXRXRvZHGHcVSEG/CardsOnScreenScreenshot.PNG","https://steemitimages.com/DQmdAbprhMmBd56CsGNTGVcn75PPHx4vXoHyCnCKBm84VNM/New%20RPGHUD%20with%20video.png","https://steemitimages.com/DQmeYr6DWjiDFS19AMenE5eSMXyJxyeb2R4g8Nc3zZ4K5MR/RealtimeDeprecation.PNG"],"links":["https://roll20.net/","http://halfmeme.com/clay.html","https://developers.google.com/google-apps/realtime/overview","https://discordapp.com/"],"app":"steemit/0.1","format":"markdown"}
created2018-03-19 01:50:09
last_update2018-03-19 01:50:09
depth0
children6
last_payout2018-03-26 01:50:09
cashout_time1969-12-31 23:59:59
total_payout_value31.316 HBD
curator_payout_value9.769 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length8,807
author_reputation515,407,717,220,292
root_title"The story of my seemingly-cursed lightweight virtual tabletop for RPGs project(s)"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id45,245,129
net_rshares12,339,537,702,339
author_curate_reward""
vote details (279)
@elseleth ·
$0.08
Oh, that's cool! What about something like [Pusher](https://pusher.com)?
👍  
properties (23)
authorelseleth
permlinkre-danmaruschak-the-story-of-my-seemingly-cursed-lightweight-virtual-tabletop-for-rpgs-project-s-20180319t041910733z
categorytabletop-rpg
json_metadata{"tags":["tabletop-rpg"],"links":["https://pusher.com"],"app":"steemit/0.1"}
created2018-03-19 04:19:18
last_update2018-03-19 04:19:18
depth1
children2
last_payout2018-03-26 04:19:18
cashout_time1969-12-31 23:59:59
total_payout_value0.062 HBD
curator_payout_value0.019 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length72
author_reputation1,016,454,544,865
root_title"The story of my seemingly-cursed lightweight virtual tabletop for RPGs project(s)"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id45,264,023
net_rshares24,699,040,270
author_curate_reward""
vote details (1)
@danmaruschak ·
I'll look into it.
properties (22)
authordanmaruschak
permlinkre-elseleth-re-danmaruschak-the-story-of-my-seemingly-cursed-lightweight-virtual-tabletop-for-rpgs-project-s-20180319t112928537z
categorytabletop-rpg
json_metadata{"tags":["tabletop-rpg"],"app":"steemit/0.1"}
created2018-03-19 11:29:33
last_update2018-03-19 11:29:33
depth2
children1
last_payout2018-03-26 11:29:33
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length18
author_reputation515,407,717,220,292
root_title"The story of my seemingly-cursed lightweight virtual tabletop for RPGs project(s)"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id45,322,101
net_rshares0
@elseleth ·
And oh, hey, grats on nabbing a @curie nod! Got one at random with my own last post, always a treat.
properties (22)
authorelseleth
permlinkre-danmaruschak-re-elseleth-re-danmaruschak-the-story-of-my-seemingly-cursed-lightweight-virtual-tabletop-for-rpgs-project-s-20180319t211632538z
categorytabletop-rpg
json_metadata{"tags":["tabletop-rpg"],"community":"busy","app":"busy/2.4.0"}
created2018-03-19 21:16:30
last_update2018-03-19 21:16:30
depth3
children0
last_payout2018-03-26 21:16:30
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length100
author_reputation1,016,454,544,865
root_title"The story of my seemingly-cursed lightweight virtual tabletop for RPGs project(s)"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id45,416,883
net_rshares0
@niduroki ·
$0.17
Having dice on the tabletop does work in roll20:
![fiasco-roll20.jpg](https://steemitimages.com/DQmamMER5hjwzGuktmjVN2WDjeL3Lgav6ts9jnc1GEMqVYA/fiasco-roll20.jpg)
If you aren't using roll20's virtual tabletop to place miniatures on, roll20 isn't at its best though.
Tabletop Sim might do better for games like Fiasco, but TTS doesn't deal with communication really well, which means you will have even less time to look at the other players faces (especially if you only have one screen … like any normal person).

Displaying dice right next to ones face is pretty smart. Makes you wonder why no one thought of this before.
👍  ,
properties (23)
authorniduroki
permlinkre-danmaruschak-the-story-of-my-seemingly-cursed-lightweight-virtual-tabletop-for-rpgs-project-s-20180320t144607258z
categorytabletop-rpg
json_metadata{"tags":["tabletop-rpg"],"image":["https://steemitimages.com/DQmamMER5hjwzGuktmjVN2WDjeL3Lgav6ts9jnc1GEMqVYA/fiasco-roll20.jpg"],"app":"steemit/0.1"}
created2018-03-20 14:46:06
last_update2018-03-20 14:46:06
depth1
children1
last_payout2018-03-27 14:46:06
cashout_time1969-12-31 23:59:59
total_payout_value0.136 HBD
curator_payout_value0.031 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length623
author_reputation787,730,309,757
root_title"The story of my seemingly-cursed lightweight virtual tabletop for RPGs project(s)"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id45,559,943
net_rshares51,753,916,522
author_curate_reward""
vote details (2)
@danmaruschak ·
$0.09
> Makes you wonder why no one thought of this before.

Well, at least one person did, the developer of _DiceStream_ who I stole the idea from. :)  But I think the reason it's not a more popular approach has to do with the software tools that are available and the way people tend to think about software. Getting a live video feed is already a somewhat nontrivial task, so that tends to be either its own standalone app or a library that does it. If they don't provide hooks that allow you to composite other stuff with it then it's hard to do with a standalone app, and if it's a library then you've got "[network effect](https://en.wikipedia.org/wiki/Network_effect)" problems convincing people to use your virtual tabletop app that has integrated video (plus all the cross-compatibility headaches). Or if you're looking at it from the "game engine" side of it, your mind will tend to end up with map or environment simulators like roll20 or tabletop simulator because that's the kind of things those tools usually seem good at creating. Plus there's a much bigger market for tools that support those kinds of games.
👍  ,
properties (23)
authordanmaruschak
permlinkre-niduroki-re-danmaruschak-the-story-of-my-seemingly-cursed-lightweight-virtual-tabletop-for-rpgs-project-s-20180320t164336369z
categorytabletop-rpg
json_metadata{"tags":["tabletop-rpg"],"links":["https://en.wikipedia.org/wiki/Network_effect"],"app":"steemit/0.1"}
created2018-03-20 16:43:42
last_update2018-03-20 16:43:42
depth2
children0
last_payout2018-03-27 16:43:42
cashout_time1969-12-31 23:59:59
total_payout_value0.088 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length1,118
author_reputation515,407,717,220,292
root_title"The story of my seemingly-cursed lightweight virtual tabletop for RPGs project(s)"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id45,580,719
net_rshares27,487,950,163
author_curate_reward""
vote details (2)
@omnicolor ·
$0.08
Stories like this always make me hesitant to build things based on Google's free APIs. I've been wary about putting all of my eggs in their basket since they killed Google Reader.

We play online Shadowrun, and use Google Hangouts along with Slack where I've written a custom bot for dice rolling. It's not pretty in that it doesn't actually show dice, but it does show the results, which is what we really need.
👍  
properties (23)
authoromnicolor
permlinkre-danmaruschak-the-story-of-my-seemingly-cursed-lightweight-virtual-tabletop-for-rpgs-project-s-20180319t114331419z
categorytabletop-rpg
json_metadata{"tags":["tabletop-rpg"],"app":"steemit/0.1"}
created2018-03-19 11:43:30
last_update2018-03-19 11:43:30
depth1
children0
last_payout2018-03-26 11:43:30
cashout_time1969-12-31 23:59:59
total_payout_value0.058 HBD
curator_payout_value0.019 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length412
author_reputation207,218,145,392
root_title"The story of my seemingly-cursed lightweight virtual tabletop for RPGs project(s)"
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id45,324,290
net_rshares23,958,069,062
author_curate_reward""
vote details (1)