Lyntin

Lyntin FAQ

last updated: Thursday, April 22nd

Here we try to cover all your questions. If answers to your questions aren't here, send me email or ask on the lyntin-devl list. This FAQ grows as time goes on. Answers are version-specific where appropriate.

General questions

  1. What is Lyntin?
  2. Why use Lyntin?
  3. What features does Lyntin have?
  4. What is the Lyntin license?
  5. What platforms does it work under?
  6. How do I download/install/setup Lyntin?
  7. What are the differences between Lyntin and Tintin?
  8. I'm having problems--where can I go for help?
  9. Why is there only one mailing list?
  10. Something doesn't work/I found a bug...
  11. What is the meaning of life?

Usage questions

  1. The text ui is missing feature x--you need this feature or no one will use your client...
  2. How do I get Lyntin to leave the input I've typed on the command line after I hit the enter key in the tkui?
  3. The tkui is missing feature x--you need this feature or no one will use your client...
  4. Is there any way to quell all that output when I set variables and build actions?
  5. Is there a way to create default values for command arguments?

Development questions

  1. I want to write my own functionality--where do I start?
  2. Lyntin does stupid thing x stupid and I hate it--how do I fix it?

Meta-FAQ questions

  1. Where did these questions come from? Who asks this ridiculous stuff?
  2. Who wrote the Lyntin FAQ? Was it written by a committee and ratified by the elected representatives of the Lyntin development community?

General questions

Q: What is Lyntin?

Lyntin is a mud client framework written in Python which uses Python as its scripting language. It strives to be functionally similar to TinTin++ while enhancing that functionality with the ability to call Python functions directly from the input line. Additional functionality can be written in Python as Lyntin modules which can be dropped in and imported without restarting the client. It also has the advantage of being platform-independent with multiple interfaces and the ability to write new interfaces which are also drop-in.

That's the marketing line which you can see on any site that links to Lyntin. The reality is that if you can program in Python it's easy to extend Lyntin to meet your needs as a mudder. Additionally, I've used Lyntin for a variety of other tasks such as:

  • a testing harness for testing mud functionality
  • Lyntin is a decent AIM client with the AIM modules installed (available in the Lyntin code repository)
  • for the mud I'm developing, I've used Lyntin to run several character bots allowing me to step in when I want to--this makes it easier to tweak pseudo-ai code for running NPCs

Q: Why use Lyntin?

Reasons why you would want to use Lyntin:

  • if you want to use the same client on a series of platforms and even over telnet/ssh.
  • if you're familiar with Tintin++.
  • if you ever wanted to know what's happening to your character while you're in the kitchen cooking a burrito--you can create an action that pulls the person's name and pipes it to a text to speech program.
  • if you want to write modules and distribute them to friends.
  • if you want a mudclient that is GPL where you can easily implement needed functionality without harassing other developers or spending lots of time understanding the code-base.
  • if you want a mud client that's Free as in Freedom--it's YOUR mud client framework that can be molded to do what YOU need it to do.

Reasons why you would not want to use Lyntin:

  • if you require wizards to set things up and don't like the command line.
  • if you can't install Python 2.2 or later on your system.
  • if you hate Python.
  • if you're not willing to look at the code to figure out your issues.

Q: What features does Lyntin have?

Here's the short list:

  • Written in Python, comes with the source code, all GPL
  • Multi-platform
  • Multiple ui's and allows for drop in of new ui's
  • Handles ANSI colors
  • Handles multiple sessions
  • Aliases, actions, gags, highlights, variables, substitutes...
  • Handles regular expressions and ignorecase in action triggers
  • Highly configurable speedwalking system
  • Ticker
  • Data logging
  • User input history with replacements
  • Most Tintin macro commands: if, math, loop...
  • Has a Lyntin and Tintin evaluation modes--the Tintin mode will work with Tintin command files and Tintin syntax
  • In-game help
  • Ability to run arbitrary Python commands on the command line
  • Exposed API for building Lyntin modules in Python
  • Dynamically loaded modules for additional functionality
  • ...and a bunch of other stuff

Having said all that, Lyntin's real power is its expandability. Building Lyntin modules to add functionality that you need is a walk in the park. If you know Python (and learning it is not tough if you don't), then you'll be able to quickly come up to speed with things and be able to utilize Lyntin as a base to build the mud client that fits your needs to a T.

We maintain a code repository of Lyntin modules, ui's, and code snippets in the wild that we know about (mostly because authors choose to update us about their status). It's located here. Things are added periodically. Many Lyntin module developers hang out on the lyntin-devl mailing list (see contact page) and talk about their modules or problems there.

I know of modules that do the following (only some of which are in the repository):

  • two modules for allowing you to connect to AIM (in the repository)
  • a module for extending Lyntin into an HTTP server with hooks allowing you to serve content from Lyntin (in the repository)
  • a waysys module that keeps track of which directions you've gone allowing you to save those paths for usage later as well as allowing you to rapidly retrace your steps back to the beginning (in the repository)
  • a module that keeps track of how idle you are and can optionally execute an alias to switch you into and out of idle mode (in the repository)
  • a sound module for Linux (in the repository)
  • a basic status bar module that abuses the title bar of the tkui and the textui (if you're using it in an xterm) for status information like hit points, spell points, ... (in the repository)
  • mail checking module that alerts you when you have new email (in the repository)
  • powerful automapper module which saves map information in a ZODB object database and serves up map information via HTTP
  • less powerful automapper that can be used over telnet and stores things in a pickle
  • module for gathering datapoints and producing analytics for helping create reasonable bets without losing all your money for playing roulette on 3k (it has some issues--i keep losing all my money)
  • ...

Lyntin is a feature-rich framework for development. There are other modules out there in the wild that people have developed for their specific muds and their mud-usage that aren't on this site.

Q: What is the Lyntin license?

Lyntin is distributed under the GPL license. Lyntin is also written in Python and all the source code comes with the client itself. There is currently no such thing as a binary distribution of Lyntin.

Q: What platforms does it work under?

The base distribution is entirely written in Python. The base distribution comes with a textui and a tkui. There is a cursesui that's sort of in the works, but it needs a lot of attention before it's useable. The only requirements for Lyntin are that you install Python 2.2 or greater--preferably the latest version whatever that may be at the time of you reading this. Python can be retrieved at http://www.python.org/.

I've had reports of it working just fine under various flavors of Windows, Linux, and BSD. There may be problems with Lyntin on Mac OS 10.1/10.2, but I don't know enough about Mac OSX to really figure out what the issues are.

Q: How do I download/install/setup Lyntin?

Lyntin can be downloaded from here. Unix/Linux/Mac OSX users should download the .tar.gz version. Windows users should download the .zip version (for pre-4.0 versions) or the Windows installer .exe version and the runlyntin.pyw file.

Make sure to read the installation instructions in the INSTALL guide which is on the Lyntin site in the documentation section and also comes with the Lyntin download. Read the appropriate INSTALL guide for your version of Lyntin.

The README file also holds a lot of information that will help. README is on the Lyntin site in the documentation section and also comes in the download and is provided in-game through the help system by typing #help readme.

After you've done all that, read Lyntin's in-game help files accessable with the #help command.

Q: What are the differences between Lyntin and Tintin?

Lyntin has many of the same features as Tintin and the commands are based on Tintin syntax. However, there are a series of commands that Tintin and variants have that Lyntin does not have for the following reasons:

  • some because Lyntin is written in Python and exposes Python to the user making some commands kind of silly
  • some because Lyntin has better ways to do things
  • a paltry few because we haven't gotten around to it

If there are Tintin commands you miss, it's pretty easy to implement your own versions in Lyntin. See I want to write my own functionality--where do I start?.

Q: I'm having problems--where can I go for help?

See the contact page for more information.

Q: Why is there only one mailing list?

Most projects separate developers from users. Lyntin is small enough that not only do we not need to do this, but there's really no difference between a developer and a user. The group that Lyntin is targeted at is a group of people who have no problems with fixing the source code to meet their needs. Thus there is only one mailing list used for all things from using Lyntin, to bug reporting, to talking about writing plugins.

Q: Something doesn't work/I found a bug...

See the contact page for information on how to contact us and what information to provide us.

Q: What is the meaning of life?

This is an easy one to answer--the question is MOOT! Moot I say!

Usage questions

Q: The text ui is missing feature x--you need this feature or no one will use your client...

The textui is designed to be ultra-uninteresting. There are very few bells and whistles involved and the reason for this is because the fewer bells and whistles, the more of a guarantee we have of it working everywhere. Having said this, it sucks under the Win32 console--but that's not our fault as almost everything sucks under the Win32 console. (Someone should write a win32 console ui--assuming it would help.)

Anyhow, there were some efforts to build a curses user interface. Such a thing would work under xterm and other terminals as well as over telnet and ssh.

Check the code repository for plugins and new user interfaces.

Q: How do I get Lyntin to leave the input I've typed on the command line after I hit the enter key in the tkui?

Lyntin 3.3.1

The only way to change the command box thing is also to go into the tkui.py file. Open up lyntinng/ui/tkui.py and look for the line:

    self.saveinputhighlight = 0

I have it on line 509 of my file. Change the 0 to a 1. That'll change the behavior to what you're looking for.

Lyntin 4.0

Type #config saveinputhighlight on.

Q: The tkui is missing feature x--you need this feature or no one will use your client...

Feel free to submit a feature request. Details for such things are at the contact page. Alternately, check the code repository to see if someone has implemented it already.

Q: Is there any way to quell all that output when I set variables and build actions?

Yes. Most Lyntin commands have a quiet parameter which takes yes/true or no/false as valid values. For all commands except #write, this will cause the command not to produce any non-error output. This is probably what you're looking for.

In the case of #write, it will add a quiet=true to the end of all commands it writes to the file that have a quiet argument. When you later read that command file in, all the commands will be quiet.

Q: Is there a way to create default values for command arguments?

Yes. You want to create a variable:

   #var {default.quiet} {true}

That will cause all commands that have a quiet argument to have that argument default to "true". You can also specify it on a command-by-command basis:

   #var {default.grep.size} {1000}

That'll cause the #grep command to use a default size of 1000. The order of argument expansion is:

  1. user - whatever the user specified for the argument
  2. command default - if there is a command-specific default value set by the user
  3. global default - if there is a global default value for that argument set by the user
  4. command specified default - the default specified by the command syntax (this will show up in the #help file for the command)

Development questions

Q: I want to write my own functionality--where do I start?

Hacking Lyntin can be done a few ways. Lyntin is entirely written in Python, so if you don't know Python that's something you should learn first. Your best bet is to start at http://www.python.org/ and read through their documentation and such.

We have a lot of documentation in various forms about Lyntin's architecture and the framework. Start off by reading through the HACKING guide. That'll walk you through the Lyntin architecture at a high level and also provide some examples of things. After that, you'll want to read through existing code--there's lots of it in the Lyntin code repository.

We're happy to answer questions on the lyntin-devl mailing list--mostly because these sorts of questions spark interesting discussions about ways to approach specific problem domains using Lyntin's framework. Details on the contact page.

Q: Lyntin does stupid thing x and I hate it--how do I fix it?

Feel free to submit a feature request. Details for such things are at the contact page. Alternately, check the code repository to see if someone has implemented it already.

Our current wishlist of feature requests is here. Check it before submitting a feature request so that you know the current status of the request.

Lyntin is your client as much as it is ours. When you download Lyntin, you've downloaded the source code. If you find features you wish existed or behavior you dislike, let us know on the lyntin-devl mailing list. If worse comes to worse and we don't see eye to eye, replace what you don't like. Remove things you never use. Take advantage of the fact that it's distributed in source form! Though do take care to conform to the restrictions of the GPL which Lyntin is distributed under.

Meta-FAQ questions

Q: Where did these questions come from? Who asks this ridiculous stuff?

In truth, about half the questions in this FAQ were not in fact asked by anyone. Many are questions I think people who are looking at Lyntin might have--they answer basic questions anyone would have about any project. Some are questions that I threw in the FAQ because they're important to answer right off the bat so people don't get the wrong idea about certain topics such as why the Tk user interface isn't filled with bells and whistles and doesn't have its own Clippy to answer questions for you. In some ways, this FAQ is really a Questions Will Wants to Answer List.

Q: Who wrote the Lyntin FAQ? Was it written by a committee and ratified by the elected representatives of the Lyntin development community?

I wrote most of it. Actually, I wrote all of it. With help from Josh and a Lyntin module I wrote that is so complex it seems to exhibit symptoms of emergent behavior.