ID:154547
 
I'm still getting fidgity over the idea of designing a textMUD. Something about the idea that a 1000x1000 world in a graphical realm would probably take players a few hours to explore, maybe days; while a 1000x1000 world an a textMUD could take months, even years to explore. That just gives me the gitters. I love it.

Anyway, while I was drooling over some of my future design concepts, I got to thinking about the language systems that are so popular these days...

Well, what I wanted to do was have a system where depending on the level of knowledge you have in any certain language, various words or letters are removed from your setences.

For example, level 5 our of 10 in Whateverish might remove a's, e's, r's, j's, g's, q's and u's.
And it would totally remove the words "at", "that", "what", "or", and "is".

User types:
I can't believe someone would put a house way out here, what were they thinking?

text goes throuth modifictions...

Adwin says, "I cn't bliv somon wold pt hos wy ot h, w thy thinkin?"
Taylin says, "What?"


Well, that could be fun...But I have no idea how to do a lot of this stuff, which is why I'm posting it here.

For example, how do I test whether another players recieves something someone else did in oview()?

How can I remove certain letters from words? Does Deadron's library do this? (If I could get it to work I'd find out myself)


Anyway, that's just my thought. Anyone else have any suggestions?

Another possibility would be just to remove words that contain certain letters.

Level 1, remove A E I J G Q H S R
fox?

Level 2, remove I J G Q H
The brown fox over the lazy. And smell?

Level 3, remove J Q H
The brown fox over the lazy dog. And is smell?

Level 4, remove Q
The brown fox jumps over the lazy dog. And what is that smell?

Level 5, remove none.
The quick brown fox jumps over the lazy dog. And what is that smell?


something like that...

Here's what you'd do instead of sending the message to oview:

say(message as text)
for (var/mob/player/p in oview())
p << "[src] says, \"[LanguageCheck(src,p,message)]\""

LanguageCheck would be a procedure that checks p's ability to understand src's language, and it returns the new text string. You'd want to only go through mobs of type /player (or whatever you use to define player mobs) if possible, so that the computer isn't bothering to figure out if the non-sentients get the message undiluted.
In response to Foomer
Another possibility would be just to remove words that contain certain letters.

This is a neat idea! And from the examples you give, it looks like it could have good results in practice.

Spuzzum came up with another idea quite a while ago, which is the one I intend to use whenever I finally get around to using languages in a game. He pointed out that, in general, the most frequently used words in a language are also the shortest (I've since found out that this is sometimes called "Zipf's law").

So you could filter out words simply based on length. For skill of 100%, all words would be accepted; for skill of 90%, words of 9 characters or less would be accepted, and so on. With a skill of 4 you'd get this:

The bla bla fox bla over the lazy dog.

Hah... I just looked and sure enough, I have an old file of samples I captured from when I played with this. I added a nasty trick to it: if the word was too long for you to recognize, you would mistake it for a random word (or words) instead! I bet this would be a ton of fun in a game, until the lawsuits started...


The announcer says in French: your mama of bourbon command, Elvis of your mama fudge!
The announcer says in French: decadent of weenie snow, belch of Regis Philbin belt!
The announcer says in French: belt of the kill, annoy of the donut!
The announcer says in French: wart D-U-N-G. Ask for it by hose.
The announcer says in French: stinking hamburger me kill out of the pickle!
The announcer says in French: love of the bourbon, blimp of the weenie!