ID:151688
 
Well, its been a while since I've written on the forum, cause I've been busy practicing C/C++ and Lua.

But I came back to work with BYOND. But anyway, I'm working on a MUD. And I took the OLC(Online Creation) from Intermudia or however its spelled. To work with, and change.

But with working with it, the mobs are created through the OLC, but I was thinking of hard coding them in and loading them in after the rooms have been set up. But I'm unsure if I wanna go that route.

But if you have any suggestions on different ways I could do it. Let me know.
I think using what BYOND provides you with maps is definitely a good idea. Not only does it come with all sorts of functions for accessing information about the map, building on it is a cinch, separating the game into areas is as easy as defining a /area object and putting it around the areas you want, you can reset the entire map with a simple call to world.Repop(), and creating new instances of objects to put on it is as simple as typing a few lines, and using hard-coded structures is definitely a plus because it's... well. Faster, I guess.

If you want to do OLC, that's fine. But the map is already there, waiting for you to love it. Waiting for you to draw on it. Waiting for you to... map stuff. Sure you might not be able to edit it on the fly while the game is running, but really, is that that big of a loss? That's for you to decide, I guess.

Personally, I'm using maps for my MUD.
In response to Keeth
Damn you, Keeth. You always seemed to come up with the right ideas. I guess I could use that. I was just thinking of how cool it would be for something nice like that. But I might go with one of my old projects with the ASCII Map. I just get bored when it comes down to putting color on it and drawing the map really.
In response to Keeth
The map is nice for drawing, but it has several issues:

1) You can't modify it during runtime, which means you can't test it as you go without rebooting the game. This saves a serious amount of time with some things.

2) Any non-atom object used for control can't be placed/built in the same manner the rest of your world can. This means you'll need a system for that anyway, and a way to link things between the pre-compiled stuff and the runtime-generated datums.

3) The solution to #2 is obviously to hardcode every single mob type, which is what you'll need to be doing with the map anyhow.

4) Using Repop() is bad. Do you want the entire game repopping at exactly the same interval? Not using a custom spawning system is a *huge* issue, and if you do use one, then you're going to need to subtype the same mob type several times if you have the same mob respawning at different rates.

5) It takes far longer. The editor is not suited to mass-editing, which you'll be doing with a MUD. Its going to take you several magnitudes longer to do *anything*, and the more mobs you'll want respawning in rooms and the more complex your room structure, the harder it gets to figure out. Non-sensical room structures will be a real PITA, i.e. teleporting rooms that feel 'seamless' ingame aren't going to look proper on the map and you'll need to remember what is where.

6) You can't specify stuff like bit flags in a 'nicer' way. Its far easy to toggle 'Aggressive' in OLC than to toggle 4 different bit flags for behavior in code. Alternatively, you'll end up writing a wrapper to do this sort of thing at instantiation - Which is yet another layer of trouble.

7) It really takes far, far longer. Navigating around a well-built OLC system in-game with shortcuts to editing various things, the ability to instantly clone an existing type via a command, the ability to easily go, 'Repop 5 of these in this room', move to the next room and then just repeat the same command, etc. etc. If you're fast, not minding descriptions which should take an equal time in both, you can probably lay out and populate an area in less than 5 minutes if you've got the layout in mind already. That includes variable respawn rates, doors linked by keys etc. which will all need to be individually typed and hardcoded if you were using the map.
Lundex wrote:
But with working with it, the mobs are created through the OLC, but I was thinking of hard coding them in and loading them in after the rooms have been set up. But I'm unsure if I wanna go that route.

I don't exactly recall what I did with Intermundia (its been years), but if I were writing a MUD now I'd have medit ask for an initial type path to base everything off; after I give it a type path, it will spawn a mob of that exact type (ensuring anything you have hardcoded to f.ex New() will also work there), but also allowing you to deviate from that type path without having to create a new subtype by allowing runtime editing of the variables; those variables then get changed in New(), along with loading potential inventory etc.
In response to Alathon
1) You can't modify it during runtime, which means you can't test it as you go without rebooting the game. This saves a serious amount of time with some things.

I agree with this. Testing things like new mob instances, scripts, and all of the stuff will take quite a bit more time than if we were doing it with a system utilizing OLC. But to be honest, I don't really see this as a problem. Since the majority of the system is hard-coded, getting back into the world would only take a matter of seconds...if that's what you're getting at. If not, ignore this.

3) The solution to #2 is obviously to hardcode every single mob type, which is what you'll need to be doing with the map anyhow.

Yep. 100% of things involved with the map will be pretty much hardcoded.

4) Using Repop() is bad. Do you want the entire game repopping at exactly the same interval? Not using a custom spawning system is a *huge* issue, and if you do use one, then you're going to need to subtype the same mob type several times if you have the same mob respawning at different rates.

I've actually requested an area-based method of repopping not too long ago, but I didn't get a single response on it.

As for "custom" respawn rates, I don't personally consider it an absolutely necessary feature for the game. There are definitely situations where it would be good to have, and like you said, this would be a matter of creating a turf of some kind to generate these mobs at a certain rate. Considering the amount of work already involved, this isn't really that big of an issue for me.

5) It takes far longer. The editor is not suited to mass-editing, which you'll be doing with a MUD. Its going to take you several magnitudes longer to do *anything*, and the more mobs you'll want respawning in rooms and the more complex your room structure, the harder it gets to figure out. Non-sensical room structures will be a real PITA, i.e. teleporting rooms that feel 'seamless' ingame aren't going to look proper on the map and you'll need to remember what is where.

I felt the same way about this when I first tried to create a MUD-esque map system (if I remember correctly you were the one who convinced me to do it. don't hurt me if I'm wrong), and every time I tried to do something I'd hit a snag that didn't work out how I wanted. In most MUDs you play, you usually see very tight areas with detailed descriptions in every room. Every once in awhile you'll find wide-open areas with the same description in each room, but the majority of the game consists of rooms with unique descriptions.

Doing this with the BYOND map system is definitely a pain in the ass, because where as with OLC you're simply creating the room and adding a description, with BYOND you have to go through and specifically define EVERY room with a unique description. This is definitely something you probably don't want to do if you plan on having a large amount of unique rooms.

For me, I decided, when I decided to use maps, that I'd have my rooms reflect the things in the vicinity. A room with stone walls, carpets, paintings on the wall... they'll tell you. Of course, I'll add things like extra descriptions so some rooms will have unique descriptions of things that aren't physically there. This takes a lot of the stress of defining a new turf for every room with a unique description. Of course not everyone would be satisfied with this. I don't really mind it at all.

--

I agree with everything you've said pretty much. If you choose to use maps, you will be losing a lot of control. And for the things you do want to take control of, you'll have to jump through hoops.

So I guess when it comes down to it, the question is "are you okay with the limitation that comes with using BYOND maps?"

Although I don't really understand #6. I don't see how it would be different in an OLC system or otherwise.

edit: the original reason I started working on a BYOND-map MUD was because I couldn't think of one good method of looking around the map that didn't take so much effort.
In response to Keeth
Keeth wrote:
getting back into the world would only take a matter of seconds...if that's what you're getting at. If not, ignore this.

This is true only if you're testing things that don't depend on multiple factors. Yes, if all you need to do is see a room description in action then you're losing about 10 seconds per time. But then if your test case is more complicated (i.e. scripts) and you need to set things up prior to testing them (i.e. spawning stuff), then repeatedly testing the same thing is going to take much longer.

4) Using Repop() is bad. Do you want the entire game repopping at exactly the same interval? Not using a custom spawning system is a *huge* issue, and if you do use one, then you're going to need to subtype the same mob type several times if you have the same mob respawning at different rates.

I've actually requested an area-based method of repopping not too long ago, but I didn't get a single response on it.

I think this is because Repop() really is an out-of-place procedure. Its a hardcoded behavior for something that will undoubtedly involve unique steps in almost every concievable game. And almost never warrants the behavior Repop() actually has right now, which is more suited to games like Chess and such where you want things back in an initial state after a game over.

As for "custom" respawn rates, I don't personally consider it an absolutely necessary feature for the game. There are definitely situations where it would be good to have, and like you said, this would be a matter of creating a turf of some kind to generate these mobs at a certain rate. Considering the amount of work already involved, this isn't really that big of an issue for me.

Consider a boss with 2 adds that pick between a random list of potential mobs. Or an area that spawns one of 3 different types of mobs, each more rare than the previous one - Such that you have the common orcs, the occasional larger uncommon orcs and the very rare elite, towering orcs.

Now also add the complexity of unique or random equipment based on similar factors, or maybe in opposition of certain factors. You're basically surrendering control over all of this, unless you plan to use placeholder mobs that control this behavior and then delete themselves after respawning something proper. In which case you give up allowing them to depend on one another (> 3 big orcs? I can't spawn any more), and you've just created a respawning system at runtime anyhow.

5) It takes far longer. The editor is not suited to mass-editing, which you'll be doing with a MUD. Its going to take you several magnitudes longer to do *anything*, and the more mobs you'll want respawning in rooms and the more complex your room structure, the harder it gets to figure out. Non-sensical room structures will be a real PITA, i.e. teleporting rooms that feel 'seamless' ingame aren't going to look proper on the map and you'll need to remember what is where.

I felt the same way about this when I first tried to create a MUD-esque map system (if I remember correctly you were the one who convinced me to do it. don't hurt me if I'm wrong)[snip...]

I did in fact. More on this below:

I agree with everything you've said pretty much. If you choose to use maps, you will be losing a lot of control. And for the things you do want to take control of, you'll have to jump through hoops.

So I guess when it comes down to it, the question is "are you okay with the limitation that comes with using BYOND maps?"

I suppose in the end it really depends on what your game warrants. I suggested the map because you (I seem to recall) wanted a system where the map was always realistic, and using built-in procedures to grab nearby turfs is faster than softcoding an algorithm that looks at nearby rooms and orders them properly.

In Intermundia's original design, there were both turfs and rooms - Turfs became the 'world map', whose descriptions were all auto-generated based on their contents; the OLC system was extended to allow turf editing, which simply happened after the map was loaded as a sort of layer on top of it.
In response to Alathon
So I guess really, it just comes down to the type of MUD, you plan on building because everyone likes different things. And different ways of doing things. I guess I'll just have to sit down with a notepad and figure out what I want to do with my MUD. And how I want to set stuff up.

I guess there would just be a few problems here and there, but thats with everything.

OLC vs Map-based.

Thanks Keeth, thanks Alathon.

Really helped me sort out my thoughts.
Back to the drawing board.