This, this right here, is the reason I had to rewrite the Magic Words Core. And it was totally worth it. It was Mea's idea, and I think it's the whole reason I ended up working with connectable agents and generally trying out a lot of new stuff. She also provided a ton of lovely sprites for the exterior of the agent, so don't miss out on clicking that bottom button!
Note that you don't HAVE to use this as a connectable agent-- clicking the top antenna button will activate the command itself. Just make sure you remember to hit "enter" after typing in the box, otherwise it won't register and it may hog focus of the text input, meaning it won't let you type normally into the speech bubble until you find the agent and hit enter. (or, just as a general tip, if you ever find you can't type in the hand's speech bubble, quickly opening and closing the CAOS command line (shift+ctrl+c) will reset the text focus to the hand's speech bubble again).
I'm sure you all can get more creative with this than me, so let me know what you end up building!
When Mea first suggested this idea to me, I thought it would be a simple project I could knock out in an afternoon. I was wrong. This is one complicated gizmo! I never thought programming something as simple as a timer/clock would be so involved (or have so many bugs!), but this was certainly a learning experience. In the process I even found a bug in my own PCs settings that was causing this agent to display the time wrong!
I would appreciate you glancing at the help/readme for this one, just to get an idea. While writing it, I sincerely felt like I was writing a detailed user manual for an actual physical object. I'm very happy with the result though. I think this is the first connectable agent I've ever coded!
For all that it took though, it is pretty straightforward to use; it just has a bunch of little details that might not be immediately apparent. Its purpose is simply as a connectable gadget that counts real time. You can either use it in timer mode (sends a signal when the timer reaches 0) or Alarm clock mode (displays the real time and sends a signal each day at the time the alarm is set for). It also has a "closed game awareness" button you can toggle that controls whether or not the timer ticks down while the game is closed. And don't forget to click the bottom right button! Mea made a ton of lovely skins for this agent, so explore them and pick one you like!
This is one of those things that I made as proof-of-concept ages ago, but couldn't really find a practical use for it, so it got shelved. But I've been working a bit with gadgets this year and...well, I'm still not certain of a practical use for it, other than to more easily spam the SERU drop point. But... it is very fun to play with. I feel like it might also be useful for testing agents at some point too. Let me know if you do anything useful or fun (or horrifying) with it!
Some technical info-- by default, if you don't select a script with the SHIFT key, connecting a wire to any agent that isn't already connectable will result in activate 1 on that agent being run when it receives any non-zero signal, unless script 8880 exists on that agent. I've included a handful of 8880 scripts with this for various C3/DS agents that throw errors if you try to directly run activate 1 on them, so if it finds it, it will run that instead. There's also a few "888X" scripts included to perform other actions for which I found the agent's native scripts to be disappointing or difficult to use, so if you see those while on the script selection screen, know that they are generally wire-safe.
Otherwise, know that when sticking wires into things you will almost certainly run into errors and/or unexpected behavior if you select a script on an agent that was never meant to be run independently. But isn't that half the excitement?
Whoof, this one was a lot! The backstory behind this is that I wanted to make Magic Words more flexible by allowing other agents to call them-- not just the hand. But since I had written all my magic words commands assuming that the hand would always be the one to call them, it was going to require a bit of an overhaul. Personally, I feel like it was worth it, especially since it got me to push out a couple other Magic Words updates I've been working on.
I sincerely don't know anyone who even uses the keyboard handler's keybinding abilities-- for as long as DS has existed I can barely even remember anyone talking about it. (If you're a person who does, I would love to know what you bind to your keys.) But I figured it might be more useful if I made it compatible with Magic Words, so that you can assign Magic Words phrases to a hotkey for easy access.
One thing I didn't mention in this video is that the keyboard handler implements another small update-- if you bind an F-key to a 'favorite place' as explained in the help, it will actually bind it to your current x/y location instead of the current metaroom. This has been super useful for getting around large metarooms like C2toDS quickly.
But I think in this entire pack of updates, I am most happy with the autocomplete feature added to the Magic Words Inject command. It's been on my wishlist for quite some time and I'm just glad I finally got around to doing it-- it's already making my life so much easier.
The rest of this post is aimed at developers, so if you're wondering what this core update might mean to you, read on:
Developers who have written/may write Magic Words commands, you will only need to consider updating your commands if 1) they take the location of the hand into account when deciding how to act, and 2) you want your Magic Words to instead take the location of the call-agent into account if something other than the hand called it. An example of this would be a command that typically produces or moves an item to the hand. The new Magic Words core now will send the calling agent in _P2_ to the magic words script, so you will want to update your script to check if _P2_ is an agent, and if it is, act in whatever way makes sense (like if your magic words generate an item, have that item move to _P2_'s location instead of mopx mopy). If you have any questions or difficulty with this, please get in touch with me; I am more than happy to help. I'll try to get a new template posted pretty soon, too.
Also, even if you don't update, your Magic Words will work just fine with core 1.3 -- they just may behave as though the hand is calling them even if another agent is calling them.
Developers who want to create agents that call magic words commands: You can do this by sending a MESG WRIT to script 1000 on the Magic Words Core (game "amk_magic_words_core_agent") with the command set in_p1_ and the agent doing the calling (or at least the agent you want the Magic Words to consider the agent you are calling, such as a creature) in _p2_. Example: mesg wrt+ game "amk_magic_words_core_agent" 1000 "import 1 norn" norn 0
would use Magic Words Import/Export to import one norn next to the currently selected norn. This will not produce a speech bubble-- you'll still have to use SEZZ or call the speech bubble factory if you want to do that.
Notably, using SEZZ or triggering the speech bubble factory alone will not call the Magic Words-- you still have to message the core agent. Otherwise we would have the possibility of creatively named or vocabularied creatures calling Magic Words, which, while very funny to think about, is something I'd have to patch out anyway as soon as someone started naming norns "war" with all their drive words set to "time" and warping them out to unsuspecting people running unattended worlds. As amusing as the idea is, we probably should not give norns that much power. However if you did want to give creatures that much power... you could probably make an agent with a script 126 (which is called whenever a creature speaks) that waits a few ticks before calling mesg wrt+ game "amk_magic_words_core_agent" 73 13 "" 0 which will manually trigger the Core to scan speech bubbles, including creature speech bubbles, for commands to act upon.
...Anyway, evil tangenting aside...Again, please feel free to ask any questions you have about this and/or let me know if you're having any trouble with it! I know I'm not going into a lot of detail here but I'm hoping to do a better write up when I have more time.
Toasty Test Rooms are metarooms that make me hungry for toast every time I read the name. (I probably should have eaten before writing these posts.)
But, seriously. These are essentially your run-of-the-mill test rooms, except they come pre-heated for TWB friendliness, and perhaps more interestingly, you can inject multiple of them, allowing you virtually limitless (well... except within the limits of the engine) space to run large experiments or several smaller experiments within the same world. If you really wanted to, you could even set up CA links, elevines, and dovines to chain them together like little ant farms. If you do anything creative with them I'd love to hear about it!
These rooms are sort of an expression of something I have been playing with a long time. I first proposed the concept of Adaptive Metaroom Placement (AMP for short) on the now-dead Discover Albia forums back in 2016, yet this is the first time I'm actually releasing anything that uses it! A lot of trial and error and caos has led up to this, so even though it's just a humble test room, it's a pretty exciting day.