Hi! Today it's time for a new public release of Challenger Deep, the system I've been using since Mudlet became the new standard.
A long time ago, I released the first version of my system, not as some all-in-one PK solution or a generalized system like Sunder, but as a sort of reference project for aspiring system builders. It has been a constant source of pleasure and flattery for me that most of the systems in circulation today typically feature code pulled straight from the original edition of CD. I've insisted on doing things myself, figuring out what works best and what doesn't, and that policy remains to this day.
Given the frequency of discussions centered around crashing clients, heavy lag during fights, and other difficulties, I thought it'd be fun to push out the latest edition of my system, which doesn't suffer from those problems and never has!
I think that I'm ready to wipe the slate clean and rewrite this entire thing from scratch, so it's my pleasure to release Challenger Deep in its final form, at version 0.5. You can find the download at the bottom of this post.
Challenger Deep is free to use, modify, and distribute. I try to be as permissive as I can about it. The only thing you can't
do with my system is claim that you wrote it. Technically I guess you could sell it, but it's right here for free so you'd look like a real idiot.
However, this comes with a catch!This system is released with minimal support.
You get a readme file, a reference image so that you can tell whether or not the system looks right, and that's it. I will answer questions if need be, but I'm afraid I have no interest in providing live tech support. This system is for learning, but it may not necessarily be for newbies.
The best way to reach me is at Earthcrusher#0001 on Discord. Please don't bother me in-game with system questions!
What's the Big Deal About Challenger Deep?
- CD was built to be as character-agnostic as possible. I can safely say I've reached the limit of what I can do without saving any information about you. The only data the system saves, at all, is Mudlet's internal color table (in case you modify it), and a module I wrote to track my area exploration progress.
- CD makes use of the "pulse", a 0.1s timer that raises a custom event by the same name. I learned early on that the pulse (or "heartbeat" as some have called it) was a vastly superior method to triggering off the prompt, being much more consistent and therefore predictable. It will burden your computer's resources the same amount at all times, rather than use a sudden spike of CPU as soon as you encounter spam.
- An optimized method of initializing the system and its table-based structure, one that won't forget things or suddenly break into pieces if you accidentally look at its script file or click on the wrong ones in some arcane order.
- The system ships with numerous extensions to Lua's libraries, including a fun little hack to give the language Python-style string substitution. More info on that here.
- No hacky nonsense, no lazy workarounds. No spamming ent orders every balance or making sure you're mounted every single prompt. I have taken incredible pains to make sure the system doesn't do things until it needs to. The use of GMCP has been maximized so we don't have to do silly things like check INFO HERE. In the rare event that it has to resort to a cheap trick, I've hidden it the best I can, and ensured it won't slow things down.
- It includes a well-designed UI that displays information about your current room in a dynamic and extremely useful way. Once you've gotten used to the room info screen, it's hard to play without it.
- CD has the sexiest prompt replacer you have ever seen. I'm proud of it.
- Animated balance bars.
- Lovely replacements for certain game messages and displays. My custom displays have been ported to the actual game time and time again!
- Every single conceivable module in the system was given an optimization pass; any piece of code that runs without your say-so (read: triggers, scripts, anything but aliases) was written and rewritten until I could get the lowest possible execution time, all in accordance with Roberto Ierusalimschy's Lua Performance Tips, among other reference documents. And then I said screw it, and optimized most of the aliases too.
- The input throttling API makes the system virtually spam-proof.
What You Will and Will Not Get
You will get:
- A competent system that can bash, craft, get around pretty easily, and hold its own in team combat, all without breaking a sweat.
- Tons of little quality-of-life additions, cosmetic displays and even replacements, and more. A lot of these are outlined in the readme, but you can't go wrong with looking through the code.
- My own custom-written affliction tracking.
- Reasonable feature completeness (read: bashing and defup routines) for many classes in the game.
- The Terminus TTF for Windows font, which incidentally the system needs or it will look like garbage!
- A working prototype offensive routine for Shapeshifters.
You will not get:
- A fully-fledged combat system, or the advanced defensive strategies that come with it.
- Out-of-the-box functional autobashing for many defined classes. I overhauled the way bashing works, and several classes fell by the wayside. See the FAQ section of the readme for what to do about this - it's not that bad.
Why Use Challenger Deep At All?
Truth be told, I don't expect you to. I'm releasing this system under the same premise as the last one - you can use it for learning, tinkering, or even simply ripping its guts out and Frankensteining them into your own work.
I partake or have partaken in nearly every activity in the game except for 1v1 PVP, an activity I see as increasingly niche and a little outmoded. Over ten years, this system has made these things very comfortable for me. It's a little weird getting used to someone else's setup, but if you're a casual player, Challenger Deep might have something you like.
- First things first: the bashing. It's in a weird place. Several months ago, I rewrote it to finally use Aetolia's server-side queueing, and it hasn't been quite the same since. It stops on a dime as soon as you've cleared the room, but if you need to say, stop hitting the enemy to run, you're going to have a little trouble. If you're fighting things that probably won't kill you, it will run 100% perfectly.
- I attempted to automate Blackjack, and never got too far. It'll throw errors, but won't interrupt your game.
- I wrote the affliction tracking months ago, and have not updated it. If they've made any adjustments to afflictions, they are not in the system. It should be trivial to compensate.
- There is an outstanding bug when playing a new character going through the Academy, in which some rather frequent newbie hint message fires off the map capture window, and causes all further game input to route to that instead. If this happens, the only way to fix it is to restart the client. Recommend disabling the map capture until you're out of the Academy.
- From the standpoint of Mudlet itself, the system is very messy! The "API" folder isn't actually an API, it just contains a big assortment of utility functions and helper tables that could be folded into more sensible parts of the project. There are tons of unfinished modules and other bits and bobs sitting around. Much like the stereotype of plumbers whose pipes leak at home, I worked as hard as I can to keep things clean on the Lua side - the Mudlet side became a little neglected.