A front end for Simutronics MUDs.
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗A multi-platform front-end client for Simutronics MUDs — DragonRealms, GemStone IV, and other Simutronics titles. Built with Kotlin Multiplatform and Jetpack Compose, with targets for Desktop (Windows, macOS, Linux), Android, and iOS.
For player-facing information, screenshots, and general usage, see the project site at warlockfe.github.io.
Pre-built desktop packages for Windows, macOS (Apple Silicon and Intel), and Linux (deb, AppImage) are available on the GitHub Releases page.
Installed copies update themselves automatically against published releases. The Android and iOS versions are still a WIP and haven't had any official releases.
Bug reports and pull requests are welcome.
develop, keep changes focused, and run ./gradlew check before pushing. ktlint runs as part of check — fix any formatting violations with ./gradlew ktlintFormat.See the KMP quickstart for general setup instructions.
You will need at least:
./gradlew :desktopApp:run
(Plain ./gradlew run works too — it resolves to the same task.)
For a faster edit-recompile loop with Compose Hot Reload:
./gradlew :desktopApp:hotRun
Useful command-line flags exposed by the desktop entry point — pass them after --args="...":
<path.sal> — connect using a Simutronics .sal launch file passed as a positional argument-c <name> — auto-connect to a saved connection by name-i <path> / --stdin — replay a log file or stdin instead of connecting to a server-d — enable debug logging--sge-host, --sge-port, --sge-secure — point at an alternate SGE endpointExample:
./gradlew :desktopApp:run --args="-c Tefrin -d"
./gradlew :desktopApp:run --args="/path/to/launch.sal"
./gradlew check # tests + ktlint
./gradlew allTests # multiplatform tests
./gradlew jvmTest # JVM tests only
./gradlew ktlintFormat # auto-fix ktlint violations
Open the project in Android Studio and run the androidApp configuration, or from the CLI:
./gradlew :androidApp:installDebug
The desktop packaging tasks produce installers for the current OS via the Potassium Gradle plugin (which packages through electron-builder).
./gradlew :desktopApp:packageDistributionForCurrentOS
Outputs land in desktopApp/build/compose/binaries/main/. Format depends on the host:
.deb, AppImage, .tar under binaries/main/.dmg under binaries/main/dmg/.msi and NSIS .exe installer under binaries/main/For a release build with ProGuard applied, use packageReleaseDistributionForCurrentOS.
Useful for quick smoke tests of the packaged app without building an installer:
./gradlew :desktopApp:createDistributable
./gradlew :desktopApp:runDistributable # build + launch
./gradlew :desktopApp:packageDeb # Linux .deb
./gradlew :desktopApp:packageDmg # macOS .dmg (macOS host only)
./gradlew :desktopApp:packageMsi # Windows .msi (Windows host only)
./gradlew :desktopApp:packageNsis # Windows NSIS installer
Note: each installer format can only be built on its native host OS. The CI release workflow runs the matrix across all three platforms.
By default the build uses the version declared in gradle.properties. To override (e.g. to mirror what CI does for tagged releases), set RELEASE_VERSION:
RELEASE_VERSION=v3.0.167-beta.1 ./gradlew :desktopApp:packageDistributionForCurrentOS
The leading v is stripped automatically. The base version (without any -beta.N suffix) is used for Windows .exe VERSIONINFO and macOS CFBundleVersion, which both require dotted-integer format; the full version is preserved in the artifact filename and on Linux packages.
Releases are driven by tag pushes — the release.yaml workflow builds and publishes the matrix:
./release.sh 3.0.167 # or e.g. 3.0.167-beta.1
This tags the current commit and pushes it; CI handles the rest.
Top-level modules:
core/ — multiplatform business logic (client, networking, macro/scripting, preferences)wrayth/ — SGE protocol parser (ANTLR)scripting/ — scripting engine (ANTLR-based WSL plus Lua via lua-kmp)compose/ — shared Compose UI (desktop screens use Jewel; mobile screens use Material3)desktopApp/ — JVM desktop entry pointandroidApp/ — Android wrapperSee CLAUDE.md for a longer architectural tour.
Apache License 2.0. See LICENSE for the full text.