kageneko
Joined 12 years ago
Joined 12 years ago
This is just about building the framework for now and then putting it loose into the world. I have a big refactor in mind to further decouple the client/server from the game engine, but it'll take some work.
I did make a sample database (a JSON file that was imported into the database) for an earlier iteration that was almost entirely LLM generated. I provided it with description of the general area and what sorts of things could be found there, along with the climate and such. It did a really good job with descriptions and added little touches but it had trouble keeping the map in mind and so things that were located in the north could also be reached by going east. That could also be prompting on my part or just not giving it a strong enough framework.
This year, I am creating a nodejs MUD, well closer to a MUSH actually.
* Everything is an Entity with Attributes * A player is an Entity with its client property set * There's a handful of built-in commands, but the important ones are @eval and @set-attribute * The soft-code language is ... JavaScript. * It uses the vm module from nodejs[0] to execute stuff. * It has separate clients (so far) for Discord, Slack, and local console. It's easy to add more and will be easier after I do this one refactor.
Each time an soft-code command or function or what have you executes, it creates a new context to isolate the soft-code from the rest of the application and uses Proxy objects to isolate the database Entity from the soft-code Entity. As an example, this is the look command (placed on the global registry object):
if (!me.location) {
me.send("You are nowhere.");
} else {
me.send("**" + me.location.name + "**");
const contents = me.location.contents;
if (!contents?.length) {
me.send("You see nothing here.");
} else {
me.emit("You see:\\n" + contents.map(thing => "* " + thing.name).join("\\n"));
}
}
The Proxy manages access to Entities and Attributes (for example, Attributes can only normally be accessed by their owners).The MUSH outputs markdown for everything, so each client can format it however it likes.
I know the security is not nearly close to perfect, but it's mostly a proof of concept that I will make public one day. I did do a few things, like disable eval and Function and Promise but there's probably plenty of ways to get around it.
The new one is browser based.
The mud engine runs in a web worker and takes advantage of some of the modern web tricks to do stuff. For instance, data files (think: area files that don't change often) can be stored remotely and then cached with a service worker. This allows the MUD to run offline. But that's only fun if you're playing solo.
IO between the UI and worker is handled by message passing.
Multiplayer is handled by the MUD opening an outbound connection (probably websocket) to a connection collector host. Other players would then connect to that host and have their IO routed appropriately. The host can even be smarter: it could be a specialized Discord client, allowing users to play from there. Firebase may also be involved. I don't know.
The important bit is that this is still basically message passing, so the engine won't need to know the difference between the local user and a remote user.
The MUD database would be an IndexedDB. Probably. I haven't thought as much about that yet.
I am sure all of this is theoretically possible, at least.
There are a lot of subreddits with a lot of useful information. Search for "citizenship by descent" (not just on reddit and not just about Germany) and you'll be overflowing with stuff.
Example: I am super focused and stay on something until it is done. I am also super focused and follow problem rabbit holes all the way to the bottom.
So, I did. I tried to remember every question every recruiter had asked me (and started taking notes from then on). I wrote down 1-2 paragraph answers for each question. I found that just the act of writing down these answers and reviewing them later helped even when the interviewer would ask questions that were not on my practice sheet. It would nudge my memory and keep things fresh and a lot of things could be used for related topics.
Especially since I'm building a MUD again, but using Discord and Slack as the clients.
For drawing, diagramming, and writing things out, I often use an iPad Pro and Apple Pencil, with the Paper app [0]. I find that writing with a pencil-type thing works better for me than typing.
I also do Rubber Duck brainstorming. This is often for asynchronous collaboration with other people. I'll start up an audio recording and kinda do a stream-of-consciousness thing. If necessary, I'll go through later and edit it or take more notes from what I just said. If I'm using Paper, I'll often do a screen recording at the same time, so I can talk while I'm drawing/diagramming.
If I _have_ to use other tools, I prefer Markdown over pretty much anything. I really like StackEdit [1] because it's browser based, easy to use, and easy to sync with git repos. I take session notes for my D&D group and they automatically get turned into GitHub Pages.
0. https://apps.apple.com/us/app/paper-by-wetransfer/id50600381...
Example:
steps:
- uses: actions/checkout@v2
- uses: sfdx-actions/setup-sfdx@v1
with:
sfdx-auth-url: ${{ secrets.SFDX_AUTH_URL }}
or steps:
- uses: actions/checkout@v2
- name: Run deployment script
env:
HEROKU_API_TOKEN: ${{ secrets.HEROKU_API_TOKEN }}
The first is for an Action, the second is for a normal workflow script.I regularly drive through Alabama on the way to Florida (from Atlanta). One time, I took a wrong turn and ended up in a small town with absolutely no cell signal and closed roads everywhere. We stopped and asked a local for directions. This was SE of Dothan, AL, I think.
And several times, Google Maps has routed me through areas where I no longer have a signal (south-central AL). Once when this happened, the road it wanted me to go on was closed and it couldn't download an update. I handled this one by just driving northish, knowing that I'd hit Montgomery eventually.
https://www.npr.org/2019/06/27/736715592/the-private-firefig...
Always a researcher, sometimes a scientist. Be the UX you want to see in the world.