Collaborative playing online?

I often play IF via Zoom with a friend of mine, but it’s slightly awkward over Zoom: only one person can type and if someone doesn’t have a solid internet connection, video and screen sharing really sucks.

I’ve also used “tmate”, a Unix utility for sharing a terminal window; that works well (and both can type), but it limits you to terminal IF.

So: since I’ve been digging into Glk/Glulx this week, I threw this together on top of @zarf 's “remote-if” demo code that shows how to use RemGlk+Websockets to play IF. I added features for several people to play together (Where everyone can type), along with side chatting.

This was mostly just a code-experiment day — before I invest time into this, is this already a solved problem elsewhere? Some way to play modern parser-based IF collaboratively?

13 Likes

There’s Club Floyd. I’d prefer a more modern interface than ifMUD, though.

2 Likes

Thanks, @rileypb . I haven’t used that with these friends because I think the interfaces there are more complex than my non-MUD-tech friends would like. But I should try Club Floyd sometime :slight_smile:

This might work well as a Discord activity.

Yeah, the usual solution I’ve seen (which I and others have experimented with) is hooking an interpreter up to an instant-messaging bot, on Skype, Discord, or something of the sort. Generally this works great for plain text and not great for anything more elaborate (e.g. status bars).

There’s zarfbot-9000 on the IFTF Discord.

2 Likes

This is where RemGlk has been really helpful: it already does a decent job with status bars and images (thanks to zarf, I’m just doing the wiring).

It took a few minutes to head-scratch about it, but given that so many interps are Glk-based now, I got bocfel compiled for RemGlk and therefore it can play both Glulx and Zcode games (and since Gargoyle includes a bunch of VMs, it probably isn’t too hard to compile those VMs for RemGlk, either)

2 Likes

Right. An “activity” would give it its own space to render in, separate from the chat. So you could easily have a status bar, run multiple sessions at once, etc.

1 Like

Ah. Gotcha.

Hi! I’ve sent you a DM. This is a fantastic project. Sorry, I am trying to not completely and entirely detonate with excitement, but the cheer is tearing me at the seams. :star_struck:

5 Likes

If you’re not aware Parchment also uses RemGlk (my RemGlk-rs actually, which supports a few more features than the original). Most Glk interpreters will work with it without much difficulty.

3 Likes

I didn’t know that, @Dannii . I think Lectrote does, too.

Does one compile RemGlk-rs and then link it into the compilation of the VM (as one does for the C-based one)?

Storyfall supports multiplayer games natively - two types, one where players vote on what to do next, and another where each player plays as a different character within a story.

There’s a built-in chat too, so there’s no need to coordinate over a separate program. You can also pause and resume your session.

This is choice-based though, not parser based, though I’d consider adding parser support if there’s enough desire for it.

1 Like

Yep, you can compile it as a staticlib just like the original remglk.

2 Likes

This is awesome! Keep going!!

2 Likes

Ok, well, I got it working enough to make a proper Python package out it and add a dark theme. Software can’t be software without switchable themes, right? :wink:

I’ve put it up at GitHub - joelburton/flutterbug: Collaborative interactive fiction player. · GitHub

It’s not at all newbie friendly; you have to compile the RemGlk versions of the virtual machines, which can be a bit fiddly with the Makefile editing and such.

I suspect that this would be easier if it used the compiled-to-Javascript-VM options; it could even be packaged as an Electron app. Perhaps I’ll learn enough to do that one day :slight_smile:

But, for now, it’s at least a proof-of-concept for my use case:

  • it doesn’t require a Discord server (which I could never help my mom get on)
  • it can play ZMachine & Glulx games
  • it saves/restores and can transcript (it stores the files on the server)

Any ideas welcomed, particularly anything that could make it easier for non-shell people to be able to get running.

8 Likes

OOOOH, @Dannii , I think I just understood the real role of emglken — once I installed that in node, the basic script can be dropped in for bocfel/git/glulxe, making this so much easier to get set up.

One small thing: is it possible to pass the URL root for images? With the standard command-line glk things, I could pass ‘-ru http://localhost…’ to make sure that images had a valid src. Is there an equivalent thing to pass to emglken?

1 Like

No RemGlk-rs doesn’t support that mode unfortunately. But I did just add support for the new Inform 7 separated resources json: https://github.com/ganelson/inform-evolution/blob/main/proposals/0042-release-separated-resources.md

The client GlkOte library would also need to support it. Ie, GitHub - curiousdannii/asyncglk: AsyncGlk: A Typescript Glk library · GitHub

1 Like

Does each participant have to install this, or just the host?

Newbie friendliness would be great. Especially for someone who doesn’t want to or doesn’t know how to…

  • compile programs
  • install Python
  • set up a virtual machine
  • set up a server

(Edited to add: If it’s not possible to avoid or automate all of these things, then the next best option IMO would be to make it as painless as possible with as few steps as possible, with very clear step-by-step instructions.

Here’s an example of another collaborative playing solution, designed for Slack. It was nice, but a challenge for a newbie to install and get running. The readme and the thread discuss the steps involved and some of the difficulties I ran into trying to set it up: ClubFloyd on Slack?)

2 Likes

It seems just the host needs to install it, unless I’ve greatly misunderstood the readme.

EDIT: Ah, yeah, host installs the server, clients just join in the browser.

1 Like