All Projects → dhleong → judo

dhleong / judo

Licence: other
A more elegant way to play in the MUD

Programming Languages

kotlin
9241 projects
python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to judo

mud-server
A MUD server written in Java w/basic OLC and a channel-based chat system.
Stars: ✭ 36 (+111.76%)
Mutual labels:  mud
simplemud
SimpleMUD from MUD Game Programming book ported to NodeJS
Stars: ✭ 36 (+111.76%)
Mutual labels:  mud
logicmoo workspace
https://jenkins.logicmoo.org/job/logicmoo_workspace https://logicmoo.org/xwiki/
Stars: ✭ 41 (+141.18%)
Mutual labels:  mud
mud
炎黄文字MUD游戏,请使用 fluffos v2019 驱动
Stars: ✭ 91 (+435.29%)
Mutual labels:  mud
ckwin
C-Kermit for Windows - scriptable internet and serial communications with terminal emulation
Stars: ✭ 35 (+105.88%)
Mutual labels:  telnet-client
MudDungeonJS
A mud engine using telnet and Web sockets for web built with NodeJs
Stars: ✭ 21 (+23.53%)
Mutual labels:  mud
toaststunt
A fork of the LambdaMOO-Stunt server with features found useful during the development of Miriani and ChatMUD.
Stars: ✭ 31 (+82.35%)
Mutual labels:  mud
GMCPAdditions
These are additions to the IRE gmcp documentation
Stars: ✭ 21 (+23.53%)
Mutual labels:  mud
room.js
A node.js MOO server
Stars: ✭ 75 (+341.18%)
Mutual labels:  mud
mudjs
WebSocket MUD client for DreamLand
Stars: ✭ 13 (-23.53%)
Mutual labels:  mud
mushcode
A collection of softcode for PennMUSH and RhostMUSH meant to facilitate free-form roleplaying themepark games.
Stars: ✭ 18 (+5.88%)
Mutual labels:  mud
dwarlixir
A dwarf-fortress clone / MUD / side project in Elixir
Stars: ✭ 46 (+170.59%)
Mutual labels:  mud
tabby
A terminal for a more modern age
Stars: ✭ 40,910 (+240547.06%)
Mutual labels:  telnet-client
sdxxz
傻屌修仙传
Stars: ✭ 18 (+5.88%)
Mutual labels:  mud
dreamland code
DreamLand MUD: server code
Stars: ✭ 36 (+111.76%)
Mutual labels:  mud
Lua-MUD
A MUD framework written in lua
Stars: ✭ 25 (+47.06%)
Mutual labels:  mud
svof
Svof is an AI system for Achaea, an online MUD. It has advanced and adaptable curing capabilities, defence raising, and addons.
Stars: ✭ 52 (+205.88%)
Mutual labels:  mud
mudmap2
A mapping tool for text-based games, like text adventures, MUDs and MUSHs
Stars: ✭ 35 (+105.88%)
Mutual labels:  mud
awesome-mud
🖥 A curated list of bookmarks, tools, tutorials, and other cool resources for text-based game developers.
Stars: ✭ 61 (+258.82%)
Mutual labels:  mud
DikuMUD2
DikuMUD II from 1997
Stars: ✭ 24 (+41.18%)
Mutual labels:  mud

judo Build Status

A more elegant way to play in the MUD

What

Judo is a terminal-based, modal MUD client inspired by Vim. If you're unfamiliar with Vim and do a lot of typing or text editing, go take a look! On a Unix system you can probably run vimtutor from your favorite terminal to get an intro.

Features

Here's a quick list of some features Judo provides:

  • Most common MUD protocols: MCCP, MSDP, GMCP, Secure Telnet
  • Scripting via Python or Javascript
  • Aliases, triggers, and Prompts (of course)
  • Intelligent tab-completion, based on previously-entered commands and output from the server
  • Horizontal and vertical split windows
  • Persist input history across sessions
  • Input history searching
  • Logging, including HTML formatting
  • And, of course, modal input

Being modal means that the keys you type don't always just go into the "input buffer" for sending to the MUD server. Instead, each key press, or sequence of key presses, can be bound to do many different things, which very based on the current "mode."

Normal Mode

Normal Mode is largely identical to Vim's, where keys are used to move around the input buffer and perform large editing verbs, or actions. A verb takes an object (more commonly referred to as motions), just like in most languages. For example, if you use the delete verb (bound to the d key) with the word object (bound to the w key), you will delete until the start of the next "word." This is done by simply typing dw in Normal Mode. There's also an end of line object, $, so typing d$ will delete from the current position all the way to the end of the line.

There are many resources for learning about vim, but hopefully this very brief intro will convince you to give it a shot.

Note that not all verbs and motions from Vim are implemented in Judo—yet!

Insert Mode

Insert Mode is also largely identical to Vim's, and is equivalent in function to the only mode in most other editors. When you type in Insert Mode, the text gets inserted into the input buffer. Pressing the escape key, or hitting ctrl+[, in Insert Mode—or any other mode—will send you back to Normal Mode.

Command Mode

Command Mode is similar to Vim's, but instead of executing vimscript, it executes Python code. With functions like disconnect() which don't take any arguments, you can omit the parentheses.

Custom Modes

One interesting feature of Judo is the ability to create custom modes. We'll go into more depth on the mechanics of this feature in the scripting documentation, but the idea is to be able to have a blank slate on which to create whatever mappings you like. For myself, I created a nav mode, in which the hjkl, and uon, keys map to the directions: n, e, s, w, and nw, ne, sw, se, respectively. Holding shift while pressing these keys open the corresponding direction.

How

Judo is implemented in Kotlin because I wanted to learn more about it after Google announced their official support for it on Android. I'd been tinkering with it a bit, but it was time to really get my hands dirty. Also, the JVM is pretty ubiquitous, and I didn't want to have to deal with compiling stuff (although it does mean Judo uses a good deal more memory than Vim which inspired it).

Installing on macOS

You can easily install a build on macOS using Homebrew:

brew install dhleong/tap/judo

Then, simply use the installed judo binary as described below.

Installing on others

Builds can be found on the releases page, or you can build your own using the included Gradle script:

./gradlew jar

Then, to run:

java -jar judo/build/libs/judo-{version}.jar

Since Judo needs tight control over the terminal, you unfortunately cannot simply do ./gradle run, which also means running a debug build from IntelliJ won't work as expected. Instead, you can run like this:

java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar judo/build/libs/judo-{version}.jar

and connect IntelliJ's debugger to it by creating a "Remote" debug run configuration.

However you invoke the jar, you can save that as a script and use it in place of judo in the examples below.

Note that you may also need to install Java 8 if it isn't already available.

Connecting to a Server

You have a few options here:

  1. Pass host and port to the CLI:

     judo myawesomeserver.com 5656
    
  2. Use the :connect("host", port) command while judo is running

  3. Create a world script containing connect(host, port) and pass that to the CLI:

     judo myawesomescript.py
    
  4. Use a URI with any of the above, especially if you want Secure Telnet:

     judo ssl://myawesomeserver.com:1443
    
     :connect("ssl://host:port")
    

Configuring

Judo tries to load $HOME/.config/judo/init.py or $HOME/.config/judo/init.js every time it loads—use whichever language you prefer—so that is a great place to put common mappings, etc.

Scripting

Judo uses Python or Javascript for configuration and scripting. See Scripting.md for more details, or run help in Command Mode to get started.

Why

I've played MUDs off and on throughout my life, but when I started getting into them again recently, I found that trying to navigate around worlds quickly put my hand into a very RSI-inducing position (I don't have a keyboard with a numpad). I was inspired by my favorite editor to create something modal, so I could bind the hjkl keys to the cardinal directions and keep my hands comfortably on the home row.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].