[Home] [Downloads] [Search] [Help/forum]

Gammon Forum

See www.mushclient.com/spam for dealing with forum spam. Please read the MUSHclient FAQ!

[Folder]  Entire forum
-> [Folder]  MUDs
. -> [Folder]  MUD Design Concepts
. . -> [Subject]  Another "Building a new mud"
Home  |  Users  |  Search  |  FAQ
Username:
Register forum user name
Password:
Forgotten password?

Another "Building a new mud"

It is now over 60 days since the last post. This thread is closed.     [Refresh] Refresh page


Posted by Nathan   (3 posts)  [Biography] bio
Date Sat 06 Mar 2010 01:24 AM (UTC)
Message
Greetings all, my first post here after reading for quite some time. I figured I'd solicit some feedback on a few ideas I had kicking around. I won't go into story so much as I've been working with someone for a year and have a pretty hefty library of lore to convey to players the idea, but I would like your thoughts and opinions of the mechanics and their complexity in coding. So without further ado...

Levels will be hidden from the player with a hard level cap of 40. Levels will be gained via a combination of experience from quests/killing monsters and individual skill levels.

Skill levels will be hidden from the players with a hard level cap of 40, but displayed to players by a range, such as "Novice, Adept, Expert, Artisan, Master". 1-9 Novice, 10-18 Adept, 19-27 Expert 28-36 Artisan, 37-40 Master. Skills would only be learned once, and then advanced through usage with each higher level taking exponentially more uses.

There would be no class system, instead the skills would be tier based. In order to learn a tier 2 skill, a player would have to learn a certain number of tier 1 skills. There would be a finite number of "learns" available to a player, so not all skills would be able to be learned, and choices would have to be made within each skill realm as well. This way to unlock the truly powerful skill in a skill realm, dedication is required. I hope this would make each character unique, and realize it will require very finite balancing to prevent "cookie-cutter" builds.

World economy would be based on a multitude of things. There will be a crafting and gathering system, and the game would log transactions (privately, players won't know about it) and eventually "learn" the cost of everything. It will also keep track of all currency in the game, and be able to measure economic flow. I intend to write in scripts that would trigger if the economy stagnates, such as the loan of money from game banks to players to form their own stores or build their own homes. Money sinks would include interest on these loans, buying "land" to build homes on, home taxes, as well as offering key components from game stores that can't be found elsewhere. I also intend to create some sort of web interface that would allow players to order/create truly unique items that would cost them in game currency. Each one of these items would require immortal approval if the statistics on it fell out of bounds.

Currently I'm more pro PVP than against it. Anyone could kill anyone, but I intend to implement a comprehensive justice system so that a murderer would at first not be allowed in a city escalating to the point where smart scripted mobs might continuously hunt them. This would at first be mostly autonomous eventually growing into being player run.

To determine the outcome of every action besides the very basic, I intend to generate two random numbers using a standard distribution, the actor's and the receiver's. The mean would be a combination of their level and skill level plus any specific modifiers from effects already on the player, and the standard deviation would exponentially decay based on the individual skill level of the action in question. I feel this is extremely fair but allows for random things to happen.


Well, I have a ton of other ideas but I think I've blabbered on long enough. Another challenge in all of this is deciding which language to write it in. I've studied Java and am teaching myself C++ as well as Objective C, and am leaning towards C++ as the language of choice for speed of execution, especially if the economic model lifts off the ground. I do like the Java aspect of the web services as I'm unfamiliar what C++ or Objective C offers. Lastly, I intend to either run Python or Lua as my scripting language, or possibly make my own that would be easier for people with no programming knowledge to use, though I don't see any reason to re-invent the wheel on that one.

I appreciate any feedback.

[Go to top] top

Posted by David Haley   USA  (3,881 posts)  [Biography] bio
Date Reply #1 on Sat 06 Mar 2010 08:29 PM (UTC)
Message
I'm somewhat pressed for time at the moment, so this will be brief, but here are some thoughts:

- Levels serve two main purposes: as a convenient way of denoting the player's ability to perform in a single number, and a way of motivating the player toward achievement. The "level up" experience is a big motivator for many people. By hiding this completely, you've removed a carrot for players to reach for and you need to make sure that progress is otherwise tangible.

- Your class system sounds interesting but difficult; indeed, very fine balancing will be required. :-)

- Ditto for the economy: you'll need to be careful that your sinks are in sync (no pun intended) with your faucets. The idea of the game observing player transactions to deduce appropriate prices is a very, very interesting one though. (But you'll need a fair number of players/transactions for the statistical noise to get filtered out.)

- If you're using a normal distribution, you should note that while it's random, so-called tail events are going to be quite rare. If you have a mean of 50 and a stddev of 10, the chances of rolling a 80 are something like 0.005 i.e. 0.5% (if memory serves).

- Do not pick C++ because you think it will be faster, especially if you know Java already. C++ is faster, but Java is fast enough -- there's no need to go faster than fast enough. (In fact, Python and Lua alone are likely to be fast enough, and they're still slower than Java.)

- As you said yourself, don't reinvent the wheel by writing a new scripting language. That's a waste of time, and whatever you do is likely to be inferior to what's out there anyhow. That's not a reflection on your skill level, but on the fact that you have a lot of stuff to do with your MUD whereas languages out there are worked on by many people as the primary project, over many years. So simply put, they have a lot more effort toward their language than you do.

- Lua is very easy to embed into C/C++ programs, and LuaJava makes it fairly easy to use in Java as well. Python can be embedded into C/C++ as well, slightly less easily but still manageably, but I don't know about Java. The game EVE Online is famous for using Python to drive huge chunks of the game logic, with a core in C/C++ (probably C++).

David Haley aka Ksilyan
Head Programmer,
Legends of the Darkstone

http://david.the-haleys.org
[Go to top] top

Posted by Nick Gammon   Australia  (21,322 posts)  [Biography] bio   Forum Administrator
Date Reply #2 on Sun 07 Mar 2010 11:38 PM (UTC)
Message
You have some nice ideas there. I haven't used Java personally, it could be fine for what you want to do. C++ is pretty-much "industry standard" and there is the free g++ compiler you can use on practically any platform.

I would agree with David about not re-inventing the wheel with scripting engines (and I used to write my own once), but now Lua in particular is small, powerful, and designed to be imbedded. I would use that myself.

I would be giving some thought to a friendly user-interface (along the lines of some of the examples I have done in another thread) by designing in early on a client-to-server (and vice-versa) protocol where you can send things like room descriptions, player stats etc. in a way that the client can unambiguously display them without having to write complex client triggers that fail as soon as they change their prompt.

- Nick Gammon

www.gammon.com.au, www.mushclient.com
[Go to top] top

Posted by Nathan   (3 posts)  [Biography] bio
Date Reply #3 on Tue 09 Mar 2010 04:03 AM (UTC)
Message
I really appreciate the feedback so far. In talking with my partner (I got a partner! Which I really like, as now the workload is potentially cut in half!) it looks like we're going to be using Java for the core of the mud as he is an experienced Java programmer, much more so than I.

We spoke about scripting languages and we both agree that it'd be a really good idea. It will give us the power to change global things on the fly, and it will allow the builders to create custom logic for mobs, rooms, items, whatnot. I think in the end that will entice builders to keep building, and would take workload off of coders in the end. Now we're just debating on if it should be Lua or Python. We're both leaning towards Lua as it claims and can back up it is the fastest scripting language out there, and some big names are using it.

Regarding the prompt, I'm not quite sure I'm following. If you are talking about user defined triggers programmed in their client, a change in the prompt shouldn't break the trigger. The only thing that would break the trigger is if we were to change the way the message is displayed, no? For example, a player might have this as a trigger.

// not real scripting language in any client I know off

Variable spatial = %i;
Trigger myTrig ="A highwayman retreats %i paces from you and begins to ready a crossbow", advance %i spaces;

If we changed the output from spaces to steps it would break their trigger, but the prompt wouldn't matter as the trigger is only looking for that specific String, no more and no less. Or did I completely miss what you were talking about?

While I'm thinking about it and since I used it in that example, I think I may have a pretty good solution for representing distance within a room on a mud. The room would have a vector to keep track of all the players in the room anyway, but why not make that a vector of vectors? Each sub vector could represent a location in a room, say vector1File to vector7File. If a player was in the vector1File and tried to strike a player in the vector7File with a weapon that couldn't reach more than say, 2 files, it should be easy enough to tell the player they aren't close enough.

Just some thoughts.
[Go to top] top

Posted by Nick Gammon   Australia  (21,322 posts)  [Biography] bio   Forum Administrator
Date Reply #4 on Tue 09 Mar 2010 04:12 AM (UTC)
Message
Nathan said:

Regarding the prompt, I'm not quite sure I'm following. If you are talking about user defined triggers programmed in their client, a change in the prompt shouldn't break the trigger. The only thing that would break the trigger is if we were to change the way the message is displayed, no?


All I am saying is, a lot of triggers used today to display things like health bars, match on something very specific, eg.


<10/100hp 20/200m 30/300mv>


So the trigger looks like:


<*/*hp */*m */*mv>


Now it the player changes his prompt in any way, the trigger probably doesn't fire.

As for the vectors, the server might know where everyone is, but how do you tell the player?

- Nick Gammon

www.gammon.com.au, www.mushclient.com
[Go to top] top

Posted by David Haley   USA  (3,881 posts)  [Biography] bio
Date Reply #5 on Tue 09 Mar 2010 04:28 AM (UTC)
Message
Nathan said:
Now we're just debating on if it should be Lua or Python. We're both leaning towards Lua as it claims and can back up it is the fastest scripting language out there, and some big names are using it.

Python is pretty fast too, slower perhaps but still pretty fast. It's also used by some pretty big names, like Google, you might have heard of it ;) Lua's strength is that it was designed to be a light-weight embedded language. Python by contrast has much larger standard libraries. If you're actually writing an application, Python is a better choice in many respects. If you're writing a relatively small piece of extension logic, Lua is the better choice (IMO). So, depending on just how much scripting will control in your game, you might consider one or the other.

Nathan said:
While I'm thinking about it and since I used it in that example, I think I may have a pretty good solution for representing distance within a room on a mud. The room would have a vector to keep track of all the players in the room anyway, but why not make that a vector of vectors? Each sub vector could represent a location in a room, say vector1File to vector7File. If a player was in the vector1File and tried to strike a player in the vector7File with a weapon that couldn't reach more than say, 2 files, it should be easy enough to tell the player they aren't close enough.

As Nick alluded to, this is actually a Really Hard Problem. Yes, it's not that hard to solve this technically on the server side. But how does the player see and interact with this data? You can display a map of the room, with 10x10 characters or something and letters representing people. OK, but what if people move? Do you display the map again? Do you keep spamming the map every time people move? Let's say you don't spam it, but now the player needs to keep pulling it up by hand, and then the data can become rapidly obsolete. What about moving around? Do you target a coordinate and move there? What if something gets in your way? Can several people occupy the same square? Etc...

A lot of this can be addressed if you use an "enhanced" text client, like, say, MUSHclient, that can take special data that the server sends and display it in an additional embedded window (MUSHclient calls them 'miniwindows'). This way you can actually have a real-time map of the room's contents without spamming the player's main display. Many issues still remain, but this goes a very long way toward making it workable.

David Haley aka Ksilyan
Head Programmer,
Legends of the Darkstone

http://david.the-haleys.org
[Go to top] top

Posted by Nick Cash   USA  (626 posts)  [Biography] bio
Date Reply #6 on Tue 09 Mar 2010 04:51 AM (UTC)

Amended on Tue 09 Mar 2010 04:53 AM (UTC) by Nick Cash

Message
I would caution against too much complexity. The more elaborate you plan some features, the more likely it is you will never get off the ground.

I like the idea of having a fleshed out economy (then again, economics in virtual worlds is a research topic of mine), but having players take out loans to build things and then pay interest and taxes seems like stretching it just a bit. I don't think many players would be keen on being taxed in game, or having a mortgage. Part of the fun of game worlds is that many of the unpleasant aspects of real life are not present. Such financial complexity will probably discourage people from doing these things in your game and may drive players away.

Also, I personally have had a MUD with a complex legal system. Trust me, that will give you nothing but headaches. Almost every time it came up in my game it ended with four or five players banding together against another group, and whatever the verdict was the other side left after a great deal of arguing. Plus, as the administrators, you will draw a lot of flak, even if you weren't involved at all. Instead of implementing a serious legal system, I would just implement a system of hard laws that have little interpretation and don't need a body of justice to be upheld. You can add PVP and faction conflict, but do it in a way where the politics don't get in the way of enjoying the game. Think Aion, or WOW (but with a bit more faction interaction).

I think my biggest suggestion would be to follow the mantra of Paul Graham and agile programmers: release early, and release often. Just get something up and running, with your core features. Add the cool stuff later. The most important thing is attracting a few good players to give you real feedback on your ideas, as opposed to you implementing something you think is neat but none of the players like. Their feedback is priceless, which is great since it is also free.

~Nick Cash
http://www.nick-cash.com
[Go to top] top

Posted by Nathan   (3 posts)  [Biography] bio
Date Reply #7 on Tue 09 Mar 2010 05:31 AM (UTC)
Message
Again, very much appreciate the replies.

I hadn't thought about that specific prompt issue. Though giving some thought to it, I think I'd probably just lock the prompt and not use exact numbers. Something like

HP: Excellent MV: Full

And using descriptive names for other ranges.

I've played games with customizable prompts and others without, and weighing the two I don't really see the benefit of customizing it. Just my initial impressions on that problem.

As far as displaying the where a player is in the room, I was thinking more of a command that players could type, such as "position". It might return something like:

4 paces in front of you: Joebob
Next to you: Foo
1 pace behind you: Bar

And you could extend that command to take a player name as an argument:
position Joebob
4 paces in front of you: Joebob

As players advance and retreat through the files in a room, just informing the player of the movement should suffice to keep it relevant.

Joebob retreats 4 paces.

I wasn't planning on doing a true cartesian coordinate system from the rooms, so there would only be one axis to worry about. If I were to add flight to the game, I suppose I could use the pythagorean theorem and floor the result to create something to work with that should be easy enough for the engine to use, and display that to the players like by including the second coordinate in the room description. Maybe even reiterate it in the position command.

You see Joebob here, flying at 20 feet.
position Joebob
4 paces in front of you: Joebob (flying at 20 feet)

Regarding the economy, very good points and thinking about it I agree with you about taxes and loans. I suppose I got carried away and was having a geek freak. Any time I think I get to do fun things with math, I start to get carried away.

The legal system I envisioned would automatically warrant someone if they attacked say, a city guard, but would only issue a warrant for them in that specific city. Players involved in that city's justice could hunt that player down, or the player would be attacked on site in the future by any mobs that implemented that city's justice. I suppose players involved in that city's justice, and having met some sort of requirements, could issue a warrant for someone as well for breaking laws specific to that city or territory. Of course, as more and more player's populated the game, they could create their own laws that wouldn't be hard coded or enforced by the game itself, but could lead to some interesting things like:

Player A murders someone in Spamalot.
Player B who has appropriate permissions issues a warrant for Player A.
Player A hides in Camalot, which the players who run the city's justice system have not agreed to allow Spamalot warrants to be served in Camalot.
Player B now either goes against Camalot laws and kills Player A in Camalot, waits until Player A is out of Camalot jurisdiction and kills him, or if it is serious enough Spamalot declares war on Camalot, and massive battles ensue.

That brings up another idea of conquerable territories that auto-populate with faction specific mobs once a territory is conquered, but that's an entirely separate can of worms. I don't think doing that with cities would be a good idea simply because everyone needs a place to call home, but resource rich areas or some specific neutral cities might be interesting to try it with.
[Go to top] top

The dates and times for posts above are shown in Universal Co-ordinated Time (UTC).

To show them in your local time you can join the forum, and then set the 'time correction' field in your profile to the number of hours difference between your location and UTC time.


7,693 views.

It is now over 60 days since the last post. This thread is closed.     [Refresh] Refresh page

Go to topic:           Search the forum


[Go to top] top

Quick links: MUSHclient. MUSHclient help. Forum shortcuts. Posting templates. Lua modules. Lua documentation.

Information and images on this site are licensed under the Creative Commons Attribution 3.0 Australia License unless stated otherwise.

[Home]


Written by Nick Gammon - 5K   profile for Nick Gammon on Stack Exchange, a network of free, community-driven Q&A sites   Marriage equality

Comments to: Gammon Software support
[RH click to get RSS URL] Forum RSS feed ( https://gammon.com.au/rss/forum.xml )

[Best viewed with any browser - 2K]    [Hosted at FutureQuest]