No description
  • C++ 77.5%
  • Lua 19.7%
  • Shell 1.3%
  • CMake 0.8%
  • Python 0.3%
  • Other 0.2%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Jay Howard 5830a3bdb4
fix: moving a window over the main output no longer loses text (#10336)
#### Brief overview of PR changes/additions

- A repaint covering only part of the output pane no longer treats its
region as the limit of what needs redrawing when the view has scrolled
since the last paint, so the scroll is applied instead of discarded.
- Skips the unshifted cache blit while a scroll is owed, because that
path suppressed the shifted blit that would have applied it.
- Adds a functional test with two cases: text arriving during a drag,
and the view leaving the top of the buffer.

#### Motivation for adding to Mudlet

Repositioning a window over the main output permanently loses the game
text that arrives while the mouse is down.

#### Other info (issues closed, discussion etc)

Fixes #10335

Pre-release regression from #10195 - that commit is in the public test
builds but in no release, so this defect cannot occur in 5.0.0 or 5.0.1.
`showNewLines()` used to call `update()`, so a pending scroll always
coincided with a full-widget repaint request and Qt coalesced any drag
damage into it; `scheduleUpdate()` now defers within the pacing window,
so a partial region can arrive alone with a scroll still owed.
`drawForeground()` is byte-identical at 22ff316fc^ and current
`development`, and the added test passes at the former and fails at the
latter — which pins the trigger to that commit rather than to the paint
logic, and is why the fix is in the old blit code and not in the pacer.

Also fixes a second defect with the same cause, covered by the second
test case: leaving the top of the buffer during a partial repaint
shifted the screen by a row count taken from the repaint region instead
of from the scroll, leaving duplicated rows on screen.

**Test case:** With a timer emitting lines (`tempTimer(0.4, [[echo("line
" .. os.clock() .. "\n")]], true)`), create an `Adjustable.Container`
overlapping the main output and drag it back and forth across the output
while lines arrive. Before: only the bottom row updates during the drag,
and the lines emitted while the mouse was down never appear. After: the
output scrolls normally throughout. `ctest` — 165/165, including
`ScrollLostOnPartialRepaintTest`.

Assisted-by: Claude:claude-opus-5

---------

Signed-off-by: Jay Howard <jay.patrick.howard@gmail.com>
2026-09-05 23:35:42 +00:00
.agents/skills Infra: Run the Lua tests headlessly on a Wayland desktop (#10386) 2026-09-05 12:40:44 +02:00
.claude Infra: Run the Lua tests headlessly on a Wayland desktop (#10386) 2026-09-05 12:40:44 +02:00
.devcontainer Infrastructure: update edbee-lib submodule & use system oniguruma if present (#9156) 2026-04-06 16:28:46 +01:00
.github Infra: Sign the Qt and other bundled libraries on Windows (#10313) 2026-09-01 15:11:51 +00:00
.signpath Infra: Sign the Qt and other bundled libraries on Windows (#10313) 2026-09-01 15:11:51 +00:00
.vscode add: 3rd party definition files for Lua (#8966) 2026-03-25 16:38:21 +11:00
3rdparty Infrastructure: Bump 3rdparty/sentry-native from 22e1073 to 1c935e8 (#10377) 2026-09-04 22:36:20 +02:00
CI Infra: Sign the Qt and other bundled libraries on Windows (#10313) 2026-09-01 15:11:51 +00:00
cmake Infra: Make the libmudlet progress audit fail loudly instead of miscounting (#10374) 2026-09-04 21:57:52 +00:00
docker improve: remove qt5 checks (#7736) 2025-02-24 06:59:51 +01:00
docs Infra: Run the Lua tests headlessly on a Wayland desktop (#10386) 2026-09-05 12:40:44 +02:00
src fix: moving a window over the main output no longer loses text (#10336) 2026-09-05 23:35:42 +00:00
templates Update license to be GPLv2 or later. 2014-09-03 23:56:01 -07:00
test fix: moving a window over the main output no longer loses text (#10336) 2026-09-05 23:35:42 +00:00
translations Infrastructure: Update text for translation in Crowdin (#10348) 2026-09-04 06:35:54 +02:00
.clang-format infrastructure: apply clang-format style to tests too (#9201) 2026-04-20 11:56:29 +02:00
.clang-tidy Infrastructure: update .clang-tidy with version 16 checks (#7213) 2024-05-26 22:57:20 +00:00
.crowdin.yml Infrastructure: give a danger-friendly PR title to Crowdin updates (#5605) 2021-11-07 22:17:49 +01:00
.cursorrules Infrastructure: update info for LLM agents (#8245) 2025-09-23 07:06:06 +02:00
.DirIcon Fix: Add StartupWMClass and .DirIcon for AppImage icon recognition (#8480) 2025-11-13 23:16:22 +01:00
.git-blame-ignore-revs fix: Clang-format hash in .git-blame-ignore-revs (#8882) 2026-02-26 16:31:06 +01:00
.gitattributes improve: ship every default package as an mpackage (#9626) 2026-08-04 10:18:48 +02:00
.gitignore improve: filters, pause and clear for the debug window (#9688) 2026-08-28 11:43:09 +02:00
.gitmodules Fix: updater to work with github releases (#9125) 2026-04-08 20:19:41 +02:00
.imgbotconfig Infrastructure: Add .imgbotconfig file to set a PR Title which conforms with our danger checks (#5714) 2021-11-30 15:01:03 -05:00
AGENTS.md Infrastructure: update info for LLM agents (#8245) 2025-09-23 07:06:06 +02:00
asan-suppressions.txt Infra: Stop the glibc resolver leak flaking the CI leak job (#10202) 2026-08-27 06:47:46 +02:00
CLAUDE.md Infrastructure: update info for LLM agents (#8245) 2025-09-23 07:06:06 +02:00
CMakeLists.txt Add: Speech-to-text backend for scripts and packages (#9982) 2026-08-30 06:49:14 +00:00
CMakePresets.json Infra: Add release build presets for all three platforms (#10289) 2026-09-01 09:39:26 +02:00
COMMITMENT Add COMMITMENT (#2109) 2019-01-04 08:46:15 +01:00
COMPILE Update COMPILE 2017-05-14 10:40:35 +02:00
COPYING Fix: correct licensing details for (compiled) Mudlet application (#9808) 2026-08-19 15:43:46 +01:00
CPPLINT.cfg Fix typo in cppfg 2020-03-20 15:33:54 +01:00
dangerfile.js Infrastructure: trial new guideline - no TODOs as they dont actually add value (#6446) 2022-11-27 22:41:08 +01:00
icon_1024x1204.png [ImgBot] Optimize images 2020-10-23 22:28:38 +01:00
icon_dev_1024x1204.png [ImgBot] Optimize images 2020-10-23 22:28:38 +01:00
icon_ptb_1024x1204.png [ImgBot] Optimize images 2020-10-23 22:28:38 +01:00
mudlet.desktop add: telnets:// link support for secure TLS connections (#9153) 2026-04-12 17:37:37 +02:00
mudlet.png [ImgBot] Optimize images (#2684) 2019-06-29 19:37:00 +02:00
mudlet.svg [ImgBot] Optimize images 2019-10-21 07:25:43 +02:00
README.md Infrastructure: Add SignPath Foundation attribution to README (#8895) 2026-02-06 08:35:13 +01:00
SECURITY.md Infrastructure: Bump development version to 4.20.0 (#8919) 2026-02-07 19:15:47 +01:00
UI-design-philosophy.md Add UI-design-philosophy.md (#8002) 2025-08-12 07:02:24 +02:00


Mudlet
Mudlet

Play immersive, multiplayer, pure-text RPGs on Mudlet.

CodeFactor

AboutKey FeaturesDownloadHow To UseRoadmapCreditsLicense

Interfaces players have created with Mudlet

About

Mudlet is a quality MUD client, designed to take mudding to a new level.

Its a modern breed of a client on the gaming scene with an intuitive user interface, a specially designed scripting framework, and a very fast text display. That, along with cross-platform capability and an open-source development model result in a very likable game client.

Key Features

  • Simple to use
  • Very, very fast
  • Active development
  • Big, thriving community
  • Powerful trigger engine
  • Rich Lua-based coding functionality (API)
  • Excellent script editor
  • 2D and 3D mapper with autowalk
  • Powerful and simple to use GMCP
  • Discord integration
  • Completely themable
  • Open-source and Free
  • Cross platform: runs on Windows, macOS and Linux
  • Full compatibility: run same scripts on any of the above
Explain?

Easy to use client

Were big on usability, and as such, creating an easy to use client and interface is one of the defining goals of the project. This applies to both the power users and usual gamers everyone will feel at home with Mudlet, without having to waste too much time figuring out how to do something.

Designed for speed

Mudlet is designed and built to be very fast and efficient right from the start. Its scripting engine is designed to scale to large systems without bogging down and the text display is designed to handle thousands of lines in under a second. All in all, we are very serious about Mudlet being quick and take all measures to make it so.

Powerful Scripting

Mudlet features a scripting framework using Lua a small, fast and efficient scripting language. This allows Mudlet to leverage the existing community and large ecosystem of existing packages for Lua without the many drawbacks of creating a Mudlet specific scripting language. Best of all, the Lua API is seamlessly integrated in Mudlet and shared by all aliases, triggers, scripts, keybindings, buttons and other Mudlet components.

Cross-Platform love

We believe in making Mudlet available to people on all major platforms, and we work on keeping cross-platform compatibility right from start. Mudlet is available on Linux (both 32bit and 64bit), Windows, and macOS; you may be able to run it on additional platforms as well.

Download

Download for free from mudlet.org.

How To Use

  1. Download and double-click on Mudlet to run
  2. Pick an existing game and hit Connect
  3. ... or play one of your choosing:
    1. Click New
    2. Enter Server address and Port of your game (found on the game's website, e.g. mygame.com and 2003)
    3. Pick a Profile name
    4. Hit Connect

Compiling

If you'd like to compile Mudlet yourself instead of downloading, you can find instructions to do so here.

Vision

Mudlet's vision is to build the best text gaming experience possible to nurture & grow this niche scene.

Roadmap

See the project's roadmap to get an idea of where it's headed

Contribute

Join in, contributions are welcome! Find out how you can start Contributing.

Credits

Author: Mudlet Makers.

This software wouldnt've been possible without these open source packages:

Credit to Markdownify for the README inspiration.

Windows code signing provided by SignPath.io, certificate by SignPath Foundation.

License

GPL2+


website  ·  forums  ·  manual