Thanks. It should be fun, if you're into tabletop and old-school gameplay (and it ever gets made). Making an MMORPG (or more realistically, an MORPG) has been an almost life-long dream of mine, ever since I sank my highschool years into Everquest. Since then, I've tried to follow the MMO space but nothing has kept my interest for more than a few weeks. Later, I (tried to) get into MUDs, seeing as they influenced the making of EQ to such a degree that they were taken to court by the DIKUMUD guys and made to swear that their codebase did not contain any stolen DIKU code. I was never able to get past the telnet clunkiness and having to set macros for every little thing just to kind of keep up with the scrolling text "/attack %t with handgun" and shit. Never got into dwarf fortress for that reason too but whatever. Later got into tabletop from seeing how a lot of MUD's more free-form gameplay was based off of that, focus on small-group dungeon crawls, abstracting the environment away through descriptive text, high level of interactivity, etc. Everquest's world, lore, major NPCs, etc. were also lifted directly from one of the dev's old tabletop campaigns, which I believe was a major factor in them getting a game of that scale out the door with the team and time they had, couple dozen people and ~3 years IIRC.
Recently, I've been following the development of an indie MMORPG by the name of Monsters & Memories, an Everquest clone, surprisingly the first one since EQ's release 24 years ago (WoW clones being a dime a dozen). The lead (dev? designer?), Shawn Lord, was a designer on EQ since the (very poorly received) Shadows of Luclin expansion, though I believe he was lead designer during the (very well received) Planes of Power expansion. They too, are going old school with the gameplay and graphics, and they are also incorporating MUD-style text commands into the game. He talks about MUD commands a little at the end of this video ht tps://yewtu.be/watch?v=-Vihut0iKt4 The guy streams his development on the Monsters and Memories channel, and it can be pretty interesting, at least to listen to. You get to see a lot of gray-box work, database stuff, talk about design, etc. Worth a watch in my opinion. Shawn's personal channel - ht tps://yewtu.be/channel/UCFl_3ktLNPYUeicLmhSvB1Q?sort_by=newest has some good videos about behind-the-scenes EQ development and design stuff, a lot of which was news to the fan community when he posted it, quite cool if you're interested in that sort of thing.
So I've mainly been working on network stuff recently. I had been using a TCP sockets library, mainly because it's MIT licensed, easy to use, and offers TLS/SSL encryption. I know, TCP can have some nasty latency versus UDP and nobody uses it outside of browser games which are forced to, but apparently there are some "zero-latency" tricks out there like running multiple sockets per client (being able to send another packet before receiving the ack from the first one), disabling Nagle's algorithm (an anti-network congestion thing where small packets are buffered and combined into one larger one), reducing resend delay to the minimum, etc. I'm not too happy with it though. I've had to make some changes to it (which is something I don't like to with external libraries) to set some socket options that need to be set on creation, as well as to allow the sending and receiving of unsigned chars, not just signed ones. It also doesn't have async support out of the box, though I've been able to add it with STL threads. I currently have on the server side a threaded listener that gets incoming socket connections and adds them to a queue for the main thread to pick up. The main thread passes these to a threaded sender and receiver, which simply loops forever select()-ing the open sockets for activity, and if found, getting their packets and adding them to a queue for the main thread to process. The async sender/receiver also checks for new packets to send from a queue that the main thread pushes to. The client is similar, with a main thread for game stuff (input, display, etc.) and a threaded TCP client for async sending and receiving. It works, for now.
I've been doing a lot of reading though, and network stuff is a lot more involved than I first believed. Thus I'm looking evaluating nbnet - ht tps://github.com/nathhB/nbnet and enet ht tps://github.com/lsalzman/enet to save me a lot of low-level networking work, as well as to be able to use UDP, albeit with "TCP features" like ordered packets and reliable packets (will resend if no ack). enet is apparently mature and well-supported, notable for being developed for the Sauerbraten/Cube or whatever FPS. The tutorial at ht tp://sauerbraten.org/enet/Tutorial.html makes it seem straight-forward enough. nbnet is simpler, focused on smaller, hobbyist use. That said, it has an example showing off most of the library's features, using raylib, which is awesome. You can see videos of the raylib example in action here ht tps://yewtu.be/watch?v=BJl_XN3QJhQ and a little tank game here ht tps://yewtu.be/watch?v=Nz28tMpLfTQ From here, I'm going to be testing these network libraries, as well as developing a simple offline RPG to give me something to actually simulate on client and server, something like the raylib example: players log in, show up in some enclosed space with a color and player name, move around, chat, maybe fight an enemy, etc.
Some of what I've been reading: