TinTin++ Setup for Icesus

TinTin++ is a fast, terminal-native MUD client that fits well into a keyboard-driven workflow. It runs over SSH, takes plain text config files, and gives you a proper split screen with a visible command line at the bottom — the most underrated quality-of-life feature for long Icesus sessions. This guide covers a working ~/.tintinrc, the split-screen layout, UTF-8 handling for äöå, and autoconnect with auto-reconnect.

Connection Settings

Hosticesus.org
Port4000
EncodingUTF-8
Color256-color (or true color, if your terminal supports it)
Browser clientplay.icesus.org

Install TinTin++

Run it with tt++. The first thing TinTin++ does is read ~/.tintinrc, so that is where the rest of this guide starts.

Two-File Config Pattern

Keep the launcher and the session separate. ~/.tintinrc only loads the real config; ~/.tintin/icesus.tin holds everything else. That way you can have several MUDs as side files and switch between them by editing one line.

~/.tintinrc

#nop -- TinTin++ startup config
#nop -- Auto-load Icesus session
#read {~/.tintin/icesus.tin}

~/.tintin/icesus.tin

The full file is below. The sections after this code block walk through what each part does and why.

#nop -- Terminal & encoding
#config {charset} {UTF-8}
#config {color mode} {256}
#config {packet patch} {0.5}

#nop -- Split screen: scrollback on top, input at bottom
#split
#config {scroll lock} {on}
#config {command echo} {off}

#nop -- Show the Icesus prompt on the status bar
#prompt {%1 %2 >} {%1 %2 >}
#status {%p}

#nop -- Connect to Icesus
#session icesus {icesus.org} {4000}

#nop -- Auto-reconnect after disconnect (e.g. daily reboot)
#event {SESSION DISCONNECTED} {
    #showme {<128>--- Disconnected. Reconnecting in 15 seconds... ---<reset>};
    #delay {reconnect} {
        #showme {<128>--- Attempting to reconnect... ---<reset>};
        #session icesus {icesus.org} {4000}
    } {15}
}

#nop -- If reconnect fails, keep retrying
#event {SESSION CONNECT FAILED} {
    #showme {<128>--- Connection failed. Retrying in 15 seconds... ---<reset>};
    #delay {reconnect} {
        #showme {<128>--- Attempting to reconnect... ---<reset>};
        #session icesus {icesus.org} {4000}
    } {15}
}

#nop -- Aliases
#alias {q} {quit}
#alias {rr} {#session icesus {icesus.org} {4000}}

Split Screen and the Visual Command Line

#split is the single most useful TinTin++ command for a real session. It divides the terminal into two regions: a scrolling output region on top and a fixed command input region at the bottom. New game text never overwrites your half-typed command, and the cursor stays where you expect it during long combat or chat bursts.

Two companion settings keep the split clean:

If you ever need a single-region terminal again (for paste-heavy work), #unsplit reverts.

UTF-8 and Finnish Characters

Icesus sends UTF-8 by default for player text, room descriptions, and Finnish names. #config {charset} {UTF-8} tells TinTin++ to read incoming data as UTF-8 and to send your input the same way. This is what makes ä, ö, and å render correctly in room and player names instead of becoming question marks or boxes.

Two related settings:

Autoconnect

#session icesus {icesus.org} {4000} opens a session named icesus against the host and port. Because this line lives at the bottom of ~/.tintin/icesus.tin, the moment you start tt++ it reads ~/.tintinrc, which loads the session file, which connects.

Picking a session name matters. Anywhere in TinTin++ that you can target a specific session, you do so with #session icesus .... The rr alias above is just a quick way to reconnect manually if you have closed the session yourself.

Auto-reconnect

Icesus reboots happen, networks blip, laptops sleep. The #event {SESSION DISCONNECTED} handler keeps your client useful through all of that. When a session drops, the event fires, prints a message, and schedules a reconnect 15 seconds later through #delay. #event {SESSION CONNECT FAILED} handles the case where the reconnect itself fails, so the loop keeps retrying every 15 seconds until the MUD is back.

Pick a delay you can live with. Five seconds is aggressive and can spam the server during a real outage. Fifteen to thirty seconds is friendlier and still feels instant when you sit down at the keyboard again.

Auto-login — Read This First

TinTin++ can answer the login prompts for you with #action triggers. The pattern is:

#action {By what name do you wish to be known?} {your-character}
#action {Please enter your password:} {your-password}
#action {~Please enter your password:} {#line gag}

Auto-login stores your password in plain text on disk. Only do this on a machine you fully control, with a config file that has restricted permissions (chmod 600 ~/.tintin/icesus.tin). Never commit it to git, dotfiles repos, or shared drives.

If you need to be careful, skip the password line and type it yourself once per session. The autoconnect still saves you from re-typing the host and port.

The third #action uses a regex match (the ~ prefix) and pipes the password prompt line through #line gag so the password is not printed back to your scrollback. Without that, your password ends up plainly visible in the output region the moment you reconnect.

Logging

TinTin++ has a built-in logger:

#log open ~/icesus-logs/%y-%m-%d.log

Run that once a session, or add it to icesus.tin after the #session line so every session starts a dated log file. #log close closes the current log; #log append reopens an existing file in append mode if you want one log per day across multiple connections.

Aliases You Will Actually Use

Icesus has good global aliases already (alias -global in-game shows them). TinTin++ aliases are most useful for character-specific commands you want to keep out of muscle-memory hazards:

#alias {q}        {quit}
#alias {u}        {update -R %0}
#alias {ba}       {battle -a attack}
#alias {bc}       {battle -a casting}
#alias {as %1}    {cast arrow of steam at %1}

The %0 placeholder passes everything after the alias name; %1 takes the first whitespace-separated argument. If an alias can quietly hit the wrong target or send the wrong channel, make it longer and more explicit, not shorter.

Common First Problems

Related Guides

Want the fastest working client before you customize anything?

Open the browser client