marrow / jikca

A modern MU* server implementation in Python 3 using asynchronous networking and MongoDB object storage, with integral web-based client.
MIT License
2 stars 0 forks source link
interactive-fiction interactive-fiction-engine moo muck mud mud-server multiplayer-game-server mush mush-client mush-server mux text-adventure-engine

jikca

A multiplayer interactive fiction game engine.

You are standing in an open field west of a white house with a boarded front door. There is as small, sad, empty mailbox here, its own door, and flag, having been removed through violent force at some point in the recent past. You are also surrounded by a strangely pressing crowd of 23 other people. Every one looks guilty.

A deep male voice shouts over the ambient din, “Someone shot the food!”

  1. Introduction & Overview
  2. Requirements
  3. Installation Instructions

Introduction & Overview

Jikca is a single- and multi-player interactive fiction framework. If you're thinking Zork or Colossal Cave Adventure, but with more people racooning your loot, you're right on the mark. There are various forms of these, depending on core functionality and focus, such as MUSH (Multi-User Shared Hallucination), MUD (Multi-User Dungeon), MUCK, MOO, etc. There are so many, they're often collectively abbreviated as MU*.

MC Frontalot's It Is Pitch Dark is the official project theme song.

Requirements

Jikca has relatively minimal requirements, and some helper scripts to try to make setup easier. Unfortunately we can not automate the installation or preparation of everything. To wit, these are prerequisites to begin:

Installation Instructions

We recommend installing the jikca service within a Python virtual environment, a form of light-weight container to help keep all of the source files organized together, and to not pollute the system-level installed set of packages. (This also saves needing elevated administrative permissions.)

Creating and activating the runtime ("virtual") environment.

As a core feature of the Python 3 language, you can execute the following in a terminal to get set up:

  1. First, change your current working directory to the desired location for your project environment to be stored within.

    mkdir ~/Projects
    cd ~/Projects
  2. Next, get Python to construct a new directory to contain the project, then populate it with a standard subdirectory structure and a "standard library" of Python code.

    python3 -m venv jikca
  3. Change the working directory to the newly created environment, then activate it so that Python will utilize it when invoked.

    cd jikca
    . bin/activate

Installing Jikca

There are several different scenarios under which you might be installing and running this application. TO facilitate only installing the minimal amount of additional code required, we have partitioned our third-party dependencies into tagged "extra" requirements.

  1. Support a local, single player experience.

    pip install 'jikca[single]'
  2. Only install the client components, not server or engine, so that you may easily connect to and participate on an instance running elsewhere.

    pip install 'jikca[client,interactive]'
    pip install 'jikca[client,web,http]'
    pip install 'jikca[client,web,https]'
  3. Only install the bare minimum required to host a running game world, ignoring all but the most minimal game client concerns.

    pip install 'jikca[server]'

    The server tag offers additional customization based on the transport you wish to offer the game over. Add these as commas-separated additions after server and before ].

    • httpHTTP, the Hyper-Text Transport Protocol, a text-based protocol spoken over TCP generally defaulting to port 80 on public servers, as this is the default web browsers will use if none is specified. (Note: Requires administrative privileges to run on ports lower than 1024.)

    • httpsHTTPS, HTTP over an SSL or TLS encrypted channel, spoken over TCP defaulting to port 443. Additionally allows selection of additional protocols, such as HTTP/2 (formerly SPDY), or our telnet-like MUSH/1.

    • restRepresentative State Transfer, a standardization of the use of HTTP for transfer and management of resources ("objects") grouped into collections ("containers").

    • rpcRemote Procedure Call Support RPC-like interactive sessions over an HTTP or WebSocket transport.

    • wsWebSockets, expose a telnet-like interface over a WebSocket tunnel through an HTTP protocol.

    • sshSecure SHell, an interactive terminal experience over an encrypted channel. Permits username/password (or key-based) authentication as part of the initial connection process; no need to "log in" after connecting.

    • tcpTCP, the Transport Control Protocol, a low level socket (byte stream) transport. Telnet.