Resources

100 MUSH / MUX resources for MUD players

This guide provides a technical roadmap for MUSH/MUX developers and administrators, focusing on engine selection, softcode architecture, and the implementation of narrative systems essential for roleplay-centric environments.

100 MUSH / MUX resources for MUD players illustration
Placeholder illustration shown while custom artwork is being produced.

Engine Selection and Server Infrastructure

  1. 1

    PennMUSH Source Repository

    intermediatehigh

    The primary repository for PennMUSH. Use this for the most feature-rich engine with built-in JSON support and extensive function libraries.

  2. 2

    TinyMUX 2.12 Source

    intermediatestandard

    Optimized for performance and stability. Best for high-concurrency games that require a lean memory footprint and traditional MUX flavor.

  3. 3

    RhostMUSH Engine

    advancedhigh

    A highly configurable engine that offers advanced security features and compatibility layers for both PennMUSH and TinyMUX softcode.

  4. 4

    Stunnel for SSL/TLS

    intermediatehigh

    Essential for modernizing MUSH connections. Use Stunnel to wrap the telnet port in SSL, allowing clients like Mudlet to connect securely.

  5. 5

    SQL Integration (PennMUSH)

    advancedhigh

    Configure the mush.cnf to link with MySQL/MariaDB. This allows softcode to query external databases for web-to-game synchronization.

  6. 6

    Flatfile Database Backups

    beginnerstandard

    Implement a cron job to trigger '@dump' and move the resulting flatfile to off-site storage to prevent data loss from server failure.

  7. 7

    Hardcode vs Softcode Analysis

    advancedmedium

    Determine if a feature (like a custom combat parser) should be a C-level 'hcode' module or a softcode system based on performance needs.

  8. 8

    Port Mapping and Firewalls

    beginnerstandard

    Standardize on port 4201 or 6666; ensure iptables or ufw allow both the game port and the HTTP port for web-based help files.

  9. 9

    Unicode/UTF-8 Support

    intermediatemedium

    Enable UTF-8 in the engine configuration to allow players to use extended character sets for foreign languages or decorative symbols.

  10. 10

    NetMUSH 3.0 Compatibility

    advancedstandard

    When porting legacy systems, use the compatibility flags in RhostMUSH to support older NetMUSH-style function syntax.

Softcode Development and System Patterns

  1. 1

    Global Command Objects

    beginnerhigh

    Designate a 'Master Room' (typically #2) to hold objects with 'COMMAND' flags, ensuring global availability of +help or +who.

  2. 2

    The u() and z() Functions

    intermediatehigh

    Use u() for calling code on attributes and z() for executing code on remote objects to keep logic modular and reusable.

  3. 3

    Iterative List Processing

    intermediatestandard

    Master iter(), map(), and filter() for handling space-delimited lists, which are the primary data structure in softcode.

  4. 4

    Switch/Case Command Parsers

    beginnermedium

    Use the switch() function within a command attribute to handle multiple arguments and sub-commands efficiently.

  5. 5

    Setq/Getq Registers

    intermediatehigh

    Utilize the 10-30 available registers (q0-q9, qa-qz) to store temporary variables during complex calculations to reduce db lookups.

  6. 6

    Object Inheritance (Parenting)

    beginnerhigh

    Use @parent to create archetypes (like a generic 'weapon' object) and inherit attributes to child objects for easier mass updates.

  7. 7

    Attribute Trees

    intermediatemedium

    Organize data using backtick notation (e.g., STATS`STRENGTH) to create clean, searchable namespaces on character objects.

  8. 8

    Regular Expression Matching

    advancedmedium

    Apply regmatch() and grep() for advanced string parsing in user input, essential for complex chargen or combat logs.

  9. 9

    Softcode Security Flags

    advancedhigh

    Apply the WIZARD, TRUST, or INHERIT flags carefully to objects to prevent unauthorized execution of restricted functions.

  10. 10

    Side-Effect Functions

    intermediatestandard

    Understand the difference between functions that return strings and side-effect functions (like create() or set()) that modify the DB.

Social and Narrative Systems

  1. 1

    Chargen Frameworks

    intermediatehigh

    Build a multi-room character generation sequence using 'AENTER' attributes to guide players through stat allocation and bio entry.

  2. 2

    Plus-BBS (Bulletin Boards)

    intermediatestandard

    Implement a global +bbs system for out-of-character announcements and in-character news, using object-based storage for posts.

  3. 3

    Scene Management (+scene)

    advancedhigh

    Create a tool for logging roleplay sessions, allowing players to start/stop scenes and automatically save the output to a web archive.

  4. 4

    Consent and Privacy Flags

    beginnermedium

    Develop a system for players to set 'RP Preferences' (e.g., +consent/combat) to ensure safe and collaborative storytelling.

  5. 5

    Dynamic Room Descriptions

    beginnerstandard

    Use the @desc attribute with embedded functions to change room descriptions based on time of day or current weather variables.

  6. 6

    IC/OOC Channel Separation

    beginnerstandard

    Configure the built-in 'comsys' to separate narrative channels from technical support or social chatter channels.

  7. 7

    Currency and Economy Trackers

    intermediatemedium

    Build a 'Wallet' object parented to characters that tracks balance and allows for +pay and +buy commands via softcode.

  8. 8

    Virtual Room Parenting

    beginnermedium

    Use a single 'Parent Room' for all grid locations to provide uniform 'look' commands and global exits to a central hub.

  9. 9

    Automated +finger Overrides

    intermediatestandard

    Customize the +finger command to display IC stats, faction membership, and last-seen timestamps via a global command object.

  10. 10

    Grid Mapping Tools

    advancedmedium

    Implement a +map command that uses the loc() function to determine player coordinates and display an ASCII representation of the area.