Droning On ships with a code editor. It has syntax highlighting, error underlines, a console, a run/stop button, and it is a perfectly good place to write a solution. It is also, if you are the kind of person who has opinions about editors like me, somebody else's editor. We developers, are fickle.
So the scripts aren't locked inside it. They're plain .py files sitting in a folder on your disk, and the game will happily let VS Code, PyCharm, Vim, Notepad, or whatever you actually work in be the thing you type into. Save in your editor, and the change is in the game before you've finished moving your hand back to the mouse.
By the way, if you are a fellow VS Code user, I made a simple highlighter for you to use; you can find it here for free: https://github.com/Mythikos/droning-on-vscode-syntax-highlighter.
Everything you write lives in a scripts folder in the game's save directory, one file per script. There's no proprietary container, no database, no export step. You can back the folder up, drop it in a git repo, diff two attempts at the same puzzle, or copy it to another machine. When the file is on disk in the format your tools already understand, all of that is free, and none of it was a feature I had to build.
The in-game editor writes to those same files. It isn't a separate system with a sync step bolted on — it's just another program editing the folder.
The game watches the scripts folder and reloads a file when it changes underneath it. Simple in concept. Genuinely annoying in practice, for one reason: the game is also writing to that folder.
Every time the in-game editor autosaves, the operating system fires change notifications — and not one clean notification either. A single save can raise several, because the write isn't atomic and the watcher's filter is broader than you'd like. If the game naively reloads on every notification, it reloads over your own typing, which is a spectacular way to lose a line of code you just wrote.
The obvious fixes are all bad. Counting events is guesswork; the count isn't stable. Ignoring events for a short window after a save is a race that eventually loses to a slow disk. So the game does neither. Each script remembers a hash of the content the game itself last wrote. When the watcher fires, the file gets read and compared against that hash. Same content means it was our own save, or a duplicate notification, and nothing happens. Different content means a human did it, and the editor reloads.
There's a short settle delay before the read, so an external editor has time to finish flushing the file, and that read happens off the main thread — file IO never gets to stutter the game. The result is a system with no per-file bookkeeping and no timing assumptions. It only ever asks one question: is what's on disk different from what I put there?
External editor support is a toggle in the options, and it starts off. That isn't me hedging; it's that a file watcher on a folder you didn't ask anyone to aggressively watch is a thing that should be opt-in. Flip it on, and the watching starts immediately, no restart.
While it's on, the game also notices if a script file disappears. Delete one outside the game and, if it's the file you have open, the editor tells you what happened instead of silently continuing to edit something that no longer exists and writing it back into being later.
This one is easy to justify: I wrote the game in an editor I like, and I would have been irritated to be locked out of it. Muscle memory is real. If you have spent years in a particular set of keybindings, being handed a text box is a small, constant tax on every level.
There is a second reason. A script that lives as a file is a script you can share, review, and keep; and one you can pull up two years from now without needing Droning On installed to read it. Whatever you write here is yours, in a format that outlives the game.
The in-game editor isn't going anywhere, and it's still where I'd start. But the door's unlocked, and it always was.
Thanks for reading. As always, your feedback is welcome. If you haven't already, drop a wishlist and come hang out in the Discord. It's the best place to share feedback, follow development, and engage.