/**
* The language for the cats, power to the cat-people!
* Liceas, 2002
*/
#include <language.h>
inherit LANGUAGE_INHERIT;
#define MAX 12
string *vowels;
mapping spoken_consonant_matrix, written_consonant_matrix;
string long() {
return "This is the language spoken by Tuandorians!\n";
} /* long() */
void setup() {
set_long("This is the language of the Tuandor!\n");
set_name("Tuandorian");
set_start_text_bit("which looks like ");
vowels = ({
"a", "e", "i", "j", "o", "u", "y", "m", "'",
});
spoken_consonant_matrix = ([
"b" : "rr",
"bb" : "kl",
"bl" : "vn",
"c" : "wrl",
"cc" : "xzr",
"ch" : "me",
"ck" : "prun",
"cl" : "chku",
"cr" : "yaru",
"ct" : "neki",
"d" : "meu",
"dd" : "prr",
"dr" : "vvrn",
"f" : "meeo",
"ff" : "nrri",
"fr" : "mew",
"g" : "nur",
"gg" : "cli",
"gh" : "khr",
"gl" : "ymu",
"gr" : "vrr",
"h" : "krun",
"k" : "wrrl",
"l" : "bee",
"ll" : "pew",
"m" : "arre",
"mm" : "errw",
"n" : "yew",
"nd" : "nur",
"nk" : "chnk",
"nn" : "anno",
"p" : "yerr",
"pp" : "bnn",
"pr" : "yeru",
"ps" : "yerc",
"pt" : "yerv",
"q" : "q",
"r" : "urrru",
"rr" : "urli",
"s" : "ciro",
"sh" : "cino",
"sl" : "civr",
"sp" : "cire",
"ss" : "ciri",
"st" : "cix",
"t" : "xrch",
"th" : "xreu",
"tr" : "xruru",
"tt" : "xrchk",
"v" : "neerr",
"vr" : "neeuru",
"w" : "meo",
"wr" : "meow",
"x" : "meri",
"z" : "nbr",
"zz" : "nbrr"
]);
written_consonant_matrix = ([
"b" : "a single scratch",
"bb" : "two scratches running parralel",
"bl" : "a scratch with two scratches intersecting it horizontally",
"c" : "a diagonal scratch from left to right",
"cc" : "a diagonal scratch from right to left",
"ch" : "two diagonal scratches that intersect",
"ck" : "three downward scratches",
"cl" : "three scratches forming a triangle",
"cr" : "a v-shaped scratch",
"ct" : "two cris-crossing scratches",
"d" : "four horizontally parralel scratches",
"dd" : "two curved scratches",
"dr" : "a single vertical scratch",
"f" : "a larger scratch with a smaller one next to it",
"ff" : "two large scratches close beside each other",
"fr" : "five small scratches that form a star",
"g" : "a wide vertical scratch",
"gg" : "two wide vertical scratches",
"gh" : "a wide horizontal scratch",
"gl" : "two wide horizontal scratches and a small scratch",
"gr" : "a scratch like an arrow pointing up",
"h" : "a cross shaped scratch",
"k" : "several tiny scratches bunched together",
"l" : "a curved scratch",
"ll" : "a moon-shaped scratch",
"m" : "a lightning bolt shaped scratch",
"mm" : "a small grid of scratches",
"n" : "two semi-circular scratches",
"nd" : "four scratches making a square",
"nk" : "three scratches forming a triangle",
"nn" : "four scratches making a rectangle",
"p" : "several obscure scratches",
"pp" : "several scratches making a pyramid shape",
"pr" : "several scratches in a z-shape",
"ps" : "five v-shaped scratches",
"pt" : "several interlinking scratches",
"q" : "a scratch that looks like a kite",
"r" : "two vertical scratches with 3 crossing scratches",
"rr" : "a u-shaped scratch",
"s" : "a snake-like scratch",
"sh" : "a h-shaped scratch",
"sl" : "four sets of M-like scratches joined together",
"sp" : "two diagonal scratches",
"ss" : "two snake-like scratches",
"st" : "a l-shaped curvey scratch",
"t" : "a crucifix-esque scratch",
"th" : "a horizontal then a diagonal scratch",
"tr" : "two opposing diagonal lines",
"tt" : "two crucifix-esque scratches",
"v" : "an odd, spiral scratch",
"vr" : "a horizontal scratch with five crossing ones",
"w" : "several scratches making a bad O-shape",
"wr" : "a right to left diagonal followed by a vertical scratch",
"x" : "a set of scratches making a C-shape",
"z" : "an odd set of curved scratches",
"zz" : "several scratches making an obtuse shape"
]);
} /* create() */
/* Originally used by the Discworld. God bless them for good */
/* garble code */
string do_garble_speech( string text ) {
int i, flag;
string speech, word;
text = lower_case( text );
speech = "";
for ( i = 0; i < strlen( text ); i++ ) {
if ( member_array( text[ i .. i ], vowels ) != -1 )
continue;
if ( ( i + 1 ) < strlen( text ) )
if ( word = spoken_consonant_matrix[ text[ i .. i + 1 ] ] ) {
speech += word +"-";
i++;
flag = 1;
continue;
}
if ( word = spoken_consonant_matrix[ text[ i .. i ] ] ) {
speech += word +"-";
flag = 1;
continue;
}
if ( flag ) {
flag = 0;
speech = speech[ 0 .. strlen( speech ) - 2 ];
}
speech += text[ i .. i ];
}
if ( speech == "" )
return "merr";
if ( flag )
speech = speech[ 0 .. strlen( speech ) - 2 ];
while ( speech[ 0 .. 0 ] == " " ) {
speech = speech[ 1 .. strlen( speech ) - 1 ];
}
return replace( speech, " ", " " );
} /* do_garble_speech() */
string do_garble_text( string text) {
int i, j;
string word, *parts, *temp, *words;
parts = ({ text });
for ( i = 0; i < sizeof( vowels ); i++ ) {
temp = ({ });
for ( j = 0; j < sizeof( parts ); j++ ) {
if ( !parts[ j ] ) {
parts = delete( parts, j, 1 );
j--;
} else
temp += explode( parts[ j ], vowels[ i ] );
}
parts = temp;
}
words = ({ });
for ( i = 0; i < sizeof( parts ); i++ ) {
if ( !parts[ i ] ) {
parts = delete( parts, i, 1 );
i--;
} else
if ( word = written_consonant_matrix[ parts[ i ] ] )
words += ({ word });
}
if ( sizeof( words ) > MAX )
words = words[ 1 .. MAX ] + ({ "etc" });
return implode( words, ", " );
} /* do_garble_text() */
string do_garble(string text, string type) {
if (type == "text")
return do_garble_text(text);
return do_garble_speech(text);
} /* do_garble() */