35 comments

[ 3.3 ms ] story [ 80.6 ms ] thread
Play Zork, with your friends (via ssh) $ ssh -p 64100 someusername@sayitwith.ink password: nitfol > /help > /who > !look (login denied? maybe someone else is using that username, try another)
If anyone is interested in discussing this (or playing IF on my other server) please get in touch on Revolt. I am @JesusMachineSantana.

Here is an invitation to my "Guild" https://app.revolt.chat/invite/Xm9jmNDv

Maybe you have to sign up on the main page first, not sure. https://revolt.chat/

Of course, it's also possible to chat on the SSH server above, though maybe not as convenient. Either way is welcome.

Gentle reminder: when sshing into unknown places remember to check your forwarding and dont use your github/etc username.
Sage advice. This is really more suited to IRC but ssh is something everyone has readily available. It has a much lower barried to entry. Isn't a specific effort required to have [port] forwarding? I don't think anyone will do it accidentally, even were I nefarious. In other words, if you don't know what "forwarding" is, then you don't have to worry.
This: "ssh -o ClearAllForwardings=yes ..." seems like it would be a good catch-all.
Can I stick that into ~/.ssh/config somehow so it is always a default, or should i just alias it?
If you're going to change your config, couldn't you just... not have forwarding?
Alternatively you can config id_rsa from different path specifically for github and your work repo.

Use a general non-identifiable id_rsa to play with public ssh servers.

Forwarding is not the default behavior, so normally you're fine.

For others, if you do this:

    Host *
      ForwardAgent yes
you can take this as a reminder that `Host *` is playing with fire, and just asking for accidents like this. Be extremely careful with `Host *` configs, especially with anything security-sensitive.

"Careful", as in "do not do it if there's literally any risk". And if you don't know for sure, consider it a risk by default. `Host *.internal` at a minimum, or whatever hostname / dns patterns are used around you, is dramatically safer and just as convenient.

Additionally, setting up an SSH agent that requires confirmation for every use is a great measure to prevent abuse when you do forward it by mistake.
Stronger reminder: Don't play with SSH toys using your work computer, ever, as a sensible way to remain employed
i miss the much-maligned telnet :( perfect for uncritical fun stuff like this.
I wish I was able to SSH from work at all :)
Why not use your github/etc username?
it can be used to dox you
Did you write a z-machine with sockets or is this piping to an existing one (frotz, etc?) I'm curious about the internals because I'm working on my own z-machine implementation too (not ssh though!)
:) Yes I'm piping to dumb-frotz. The ssh server is a custom golang server, not a 'real' ssh daemon. Z-machine impl is fun (except for all the version differences)
Very fun indeed and easier than a sockets-based impl that covers all versions. I'm only doing v3 so far and it's a long haul! Congrats on this!
There are quite a few edge cases going the pipe route since there is no defined communication protocol and every game expresses some things slightly differently.

I try to keep the code as generic as possible but nearly every game I try has had a surprise for me. I really don't want to have tons of special cases in the code but I think some might be unavoidable.

If you're writing your own Z-machine, then you can write it in a way that plans for such integration and that would make a direct-linked approach much easier.

My 'ssh toy' has proven quite popular so far and I hope it has introduced IF to some new people.

Thanks and best of luck with your Z-Machine. Hacks and Glory await!

I'm sure you've read all the Graham Nelson Z-Machine specs etc.? And seen the various alternative implementations like nitfol (which is a bit smaller than most and easier to read maybe)?
Yes! It's practically my bible now -- I even printed a copy through printme1.com so I can have a bound copy to flip back and forth through ( and dog-ear, tag pages, etc.) I reference other implementations and z-tools to gain insight on changes in memory, objects, etc.

I'm writing blog posts on my journey - detailing each instruction and any nuance with each one, as well as the object structure, z-text and misc. I hope to post it here one day.

It is a large endeavour. Have you encountered ZSCII and the "special" text compression algorithm yet?
A blast from the past, courtesy of me - play Zork anywhere you can run a OCI container: `<container engine> run -it quay.io/games/zork`
Thanks. I played with this version (in a sandboxed VM) and it worked well. It really brought back memories. I was surprised how much I remembered about the game several decades later. Ahh those were the good old days :-)
How do you play with other people? I'm confused, but happy to see a hosted SSH application in 2021! Wanna see more of these.
I think the simplest answer to that is just to try it, if you haven't already.

Briefly, everyone connected is playing a single game of Zork (in this instance, tho any z-machine game will work). Like a chat session everyone can see every other player's commands/comments, and the game's output.

Just

  $ ssh -p 64100 urnamehere@sayitwith.ink
  password: nitfol
  > /help
  > /who
  > !look
  > !get lamp
Also, thanks and I think I must have missed the "SSH Toy" craze when it was popular.
And if you want to play more text adventures, like "The Guild of Thieves", go to http://magneticscrolls.net

Or type in

ssh -p 8080 -l magnetic magneticscrolls.net

Yes thank you @dettus.

I recently found your site via asciicinema and it was your site that inspired me to make this.

(The wheelbarrow is so annoying)