Looking for a writer for a Slack game

I’m building a slack chatbot to play intfic/text adventure games and looking for a writer to work with. The games will be very simple - short lines of text that will work inside slack, but with some simple illustrations.
Leaning towards lite puzzles for casual players, and mass market rather than RenFair themes :smiley:

I’m building out the actual game engine, but the format has a parser, rooms, things people can carry and use on other objects, all the basics. Kind of like a MUD/MOO.

If you’re interested please ping me here or at dc@rikai.co

Thanks!

1 Like

Just curious: what language?

Have you considered using Dumb Frotz as an engine for this?

@Mike_G

what language

do you mean programming language or content?
server side javascript + english for now.
I might do chinese + japanese translations later…

I like python for NLP stuff but I don’t think we’ll need that much NLP here for the parser, I’m probably just going to use a service like dialogflow. Personally I just find JS quicker to code with and if I open source the engine later it’s really accessible.

Dumb Frotz
as in this:
David Griffith / frotz · GitLab

The engine is in C, which although high performance runtime is really unproductive for me to code in. I’m not really targeting the PDP-10 or a Raspberry Pi!
It reminds me a bit of ChatScript which is a chatbot script language that locks away a lot of functionality behind it’s C implementation.

An Inform interpreter seems it would be really hard to re-implement and overkill for my initial needs.

I’m starting off with something very simple more like a data structure than a DSL, and then I’ll add features to it over time as needed. I’ve written a few similar things for chatbot platforms recently.

I’m interested what other “scripting” formats are popular around here? ren’py? Ink?

I was suggesting having a script calling Dumb Frotz as an external program. Maybe I’m misunderstanding where the program is supposed to run.

I’m planning a nodeJS server runtime. sure it could call out to a C lib but that would make it impossible for me to customize or extend the feature set… and I’d have to deal with all the deployment hassles.
Have you tried packaging your engine as an NPM module?

I haven’t tried using NPM with Frotz. What sort of features are you looking for? I’m working on a mechanism that allows the wrapper to start up the terp, do a single move, save, print results, and then exit. The terp doesn’t run between moves, which makes for much reduced server load.

My ZVM engine is a node package: https://www.npmjs.com/package/ifvms

I’m really just looking for a simple and hackable core engine that could be extended… I don’t think this is a match but congrats on keeping this complex project maintained. I’m sweating just looking at some of the commit messages like Endian swap not necessary. … reminds me of the days of hand-crafted machine code…

Nowadays, most IF is written in domain-specific languages (Inform, TADS, ChoiceScript, Twine, Dialog) which then compile to specialized formats. Inform and Dialog, for example, can be compiled to bytecode for a virtual machine called the “Z-machine”; dumbfrotz is a Z-machine interpreter that handles all the complicated stuff for you, and exposes the simplest interface possible (stdin and stdout).

So when people are suggesting dumbfrotz or the like, you wouldn’t have to deal with C at all—the goal is that the writer would be able to work in an IF domain-specific language like Dialog, and dumbfrotz would act as a bridge between the compiled Dialog game and your Slack interface. That way you wouldn’t have to reinvent the wheel building a whole world modelling system in Python or JS.

3 Likes

As an example of what Draconis explained, you can look at a Discord bot I wrote in Python. It only acts as an interface between Discord and a Glulx or Z-machine interpreter (a C program that you have to compile only once then you can forget about it). (I use RemGlk, so data are passed as JSON.)

In fact, my bot has only one file related to Discord (the rest is just for processing inputs/outputs), so you could just replace it with a file that connect to Slack instead and you’d have a working Slack bot.

Of course, if you really want to make everything from scratch in JS just for the pleasure of doing it, you can, too.

Thanks for the references! Obviously there’s a huge benefit to using existing tools, from content libraries to writers already experienced with how it works. But I feel to really provide the best experience for a new medium you need to have a really customized engine.

For example slack provides a simple method to have interactive popup modal dialogues, or “whisper” help that’s only visible to one player. I also want to do coop games where people play different roles to work together so the game state needs to have simple multiplayer/shared state features.

For all of these ideas I hate the idea of a black-box game engine.

Another question is how to work with sessions, eg multiple players at different states of the game. @Natrium729 Is that a concept built in to your discord adapter or would I have to keep multiple instances of the plugin (and all its memory space) around? Perhaps you’re not hosting your app so it hasn’t been an issue, but I’m planning to provide this as a BaaS (bot as a service)

1 Like

My bot does exactly the same thing as a standard interpreter, except it posts the output on Discord and any users can submit a command at any time. (State is the same for all users.)

You can have one game running per channel (different games or different “instances” of the same game). But each time a game is started, a new interpreter process is launched, so it can cause problems if many games are playing at the same time.


Yeah, since you want to take advantage of the particularities of Slack, making a custom engine can be a good idea. (I guess you could do the same thing with Glulx, communicating special Slack features via files generated by the story, but it may not be simple.)

1 Like

I’d use custom output streams, though that would mean a little bit of interpreter hacking.

Well, Vorple uses external files for its special features, so that’s what I first thought about.

(Also, I don’t know if custom output streams are supported by RemGlk.)

Anyway.