/****************************************************************************
* *`-.._ | |`! |`. -_ -__ -_ _- _-_- -__-_ - .'|.;' | _. * *
* * | `-!._ | `;! ;. ______________________ ,'| .-' | _!.i' * *
* A *..__ | |`-!._ | `.| |______________________| ."'| _!.;' * A *
* * |``"..__ | |`";.| i|_| ,-' : : `-. |_|'| _!-| | _|. * *
* R * | |``--..|_ | `;!| | / : : : . \ | |.'j |_..!-'| * R *
* * | | | |`-,!_|_| |_ ; __: ; | |_||.!-;' | | * *
* C *___|______|____!.,.!,.!,!| | ) . :)(. : | | |,!,.!.,.!..__|___ * C *
* * | | | | | |_| |" (##) _ | |_|| | | | | * *
* H * | | |..!-;'i| | | : ;`' (_) ( | | |`-..| | | * H *
* * | _!.-j' | _!,"|_| | : : . | |_||!._| `i-!.._ | * *
* W * _!.-'| | _."| !;| | )_ : , ; ; | | |`.| `-._| |``- * W *
* *..-i' | _.''| !-| !|_| | . . : : | |_|.|`-. | ``._ | * *
* A * | |.| |.| !| | | |" . : : . | | ||`. |`! | `". * A *
* * | _.-' | .' |.' |/|_| |______________| |_|! |`! `,.| |- * *
* Y * _!"'| !.'| .'| .'|[@] [@] \| `. | `._ | * Y *
* *-' | .' |.| |/| / .----. \|`. |`! |.| * *
* * _.'| .' | .' |/ (_^..^_) \ \ | `. | `. * *
* * |||| * *
* * * *
****** The Archway of Lost Souls code and additions by Rythmic **************
* Roleplay module *
*****************************************************************************
* Provided by Rythmic for use in Fear 2.x codebase --Xerves *
*****************************************************************************/
#include <string.h>
#include <ctype.h>
#include <stdio.h>
#include <time.h>
#include "mud.h"
bool check_social args( ( CHAR_DATA *ch, char *command, char *argument ) );
char * scramble args( ( const char *argument, int modifier ) );
char * drunk_speech args( ( const char *argument, CHAR_DATA *ch ) );
/*
* New argument3 for supporting do_sing
*/
char *one_argument3( char *argument, char *arg_first )
{
char last;
sh_int length;
length = 0;
if ( !argument || argument[0] == '\0' )
{
arg_first[0] = '\0';
return argument;
}
last = '+'; /** Symbol used to return lines **/
if ( *argument == '\'' || *argument == '"' )
last = *argument++;
while ( *argument != '\0' || ++length >= 255 )
{
if ( *argument == last )
{
argument++;
break;
}
*arg_first = (*argument);
arg_first++;
argument++;
}
*arg_first = '\0';
return argument;
}
/*
* GS style sing command
*
* You sing crypticly:
*
* "Mama Mama can't you see?"
* "What playing muds has done to me!"
*/
void do_sing (CHAR_DATA * ch, char *argument)
{
char buf [MSL];
char buf1[MSL];
char arg1[MIL];
if (argument[0] == '\0')
{
send_to_char ("Sing what?\n\r", ch);
return;
}
argument = one_argument3 (argument, arg1);
if ( (( ch->tone ) == NULL ) || ( strlen( ch->tone ) < 1 ) )
{
act (AT_SAY, "\n\rYou sing:", ch, NULL, NULL, TO_CHAR);
act (AT_SAY, "\n\r$n sings:", ch, NULL, NULL, TO_ROOM);
}
else
{
sprintf (buf, "%s", ch->tone );
act (AT_SAY, "\n\rYou sing $t:", ch, buf, NULL, TO_CHAR);
act (AT_SAY, "\n\r$n sings $t:", ch, buf, NULL, TO_ROOM);
}
sprintf (buf1, "\n\r\t \"&w%s&D\" \r", arg1);
act (AT_SAY, "$t", ch, buf1, NULL, TO_CHAR);
act (AT_SAY, "$t", ch, buf1, NULL, TO_ROOM);
while (argument[0] != '\0')
{
argument = one_argument3 (argument, arg1);
sprintf (buf1, "\t \"&w%s&D\" \r", arg1);
act (AT_SAY, "$t", ch, buf1, NULL, TO_ROOM);
act (AT_SAY, "$t", ch, buf1, NULL, TO_CHAR);
}
return;
}
void show_tones ( CHAR_DATA *ch )
{
send_to_char( "Syntax: tone <#>\n\r\n\r", ch );
send_to_char( "tone types:\n\r", ch );
send_to_char( " 1. none 2. abrupt 3. accusing \n\r", ch );
send_to_char( " 4. amused 5. angry 6. anxious \n\r", ch );
send_to_char( " 7. appreciative 8. approving 9. argumentative \n\r", ch );
send_to_char( "10. arrogant 11. bashful 12. calm \n\r", ch );
send_to_char( "13. careful 14. cautious 15. cheerful \n\r", ch );
send_to_char( "16. clear 17. cold 18. condescending \n\r", ch );
send_to_char( "19. confident 20. confused 21. coy \n\r", ch );
send_to_char( "22. cryptic 23. dark 24. deep \n\r", ch );
send_to_char( "25. disapproving 26. dismissive 27. dreamy \n\r", ch );
send_to_char( "31. exasperated 32. excited 33. firm \n\r", ch );
send_to_char( "34. flirtatious 35. frustrated 36. gleeful \n\r", ch );
send_to_char( "37. grateful 38. grave 39. greedy \n\r", ch );
send_to_char( "40. grim 41. grumpy 42. happy \n\r", ch );
send_to_char( "43. harsh 44. haughty 45. hesitant \n\r", ch );
send_to_char( "46. hopeful 47. innocent 48. joking \n\r", ch );
send_to_char( "49. jubilant 50. knowing 51. meek \n\r", ch );
send_to_char( "52. melodic 53. menacing 54. merry \n\r", ch );
send_to_char( "55. mocking 56. monotonous 57. mournful \n\r", ch );
send_to_char( "58. mysterious 59. nervous 60. patient \n\r", ch );
send_to_char( "61. pedantic 62. playful 63. proud \n\r", ch );
send_to_char( "64. quick 65. quiet 66. regretful \n\r", ch );
send_to_char( "67. remorseful 68. rude 69. sad \n\r", ch );
send_to_char( "70. sarcastic 71. seductive 72. serene \n\r", ch );
send_to_char( "73. sheepish 74. skeptical 75. sleepy \n\r", ch );
send_to_char( "76. slow 77. sly 78. smug \n\r", ch );
send_to_char( "79. soft 80. somber 81. spiteful \n\r", ch );
send_to_char( "82. squeaky 83. stern 84. stupid \n\r", ch );
send_to_char( "85. sweet 86. tactful 87. teasing \n\r", ch );
send_to_char( "88. tender 89. terse 90. thoughtful \n\r", ch );
send_to_char( "91. tired 92. understanding 93. uneasy \n\r", ch );
send_to_char( "94. warm 95. wary 96. weak \n\r", ch );
send_to_char( "97. weary 98. wistful 99. worrid \n\r", ch );
send_to_char( "100. wry \n\r", ch );
}
/*
* Express yourself better with some tone!
*/
void do_tone( CHAR_DATA *ch , char *argument )
{
char arg[MIL];
int number;
argument = one_argument( argument, arg );
if ( arg[0] == '\0' )
{
show_tones( ch );
return;
}
if ( is_number(arg) )
{
number = atoi(arg);
}
else
{
show_tones( ch );
return;
}
switch( number )
{
default: ch->tone = STRALLOC(""); break;
case 1: ch->tone = STRALLOC(""); break;
case 2: ch->tone = STRALLOC("abruptly"); break;
case 3: ch->tone = STRALLOC("accusingly"); break;
case 4: ch->tone = STRALLOC("amusedly"); break;
case 5: ch->tone = STRALLOC("angrily"); break;
case 6: ch->tone = STRALLOC("anxiously"); break;
case 7: ch->tone = STRALLOC("appreciatively"); break;
case 8: ch->tone = STRALLOC("approvingly"); break;
case 9: ch->tone = STRALLOC("argumentatively"); break;
case 10: ch->tone = STRALLOC("arrogantly"); break;
case 11: ch->tone = STRALLOC("bashfully"); break;
case 12: ch->tone = STRALLOC("calmly"); break;
case 13: ch->tone = STRALLOC("carefully"); break;
case 14: ch->tone = STRALLOC("cautiously"); break;
case 15: ch->tone = STRALLOC("cheerfully"); break;
case 16: ch->tone = STRALLOC("clearly"); break;
case 17: ch->tone = STRALLOC("coldly"); break;
case 18: ch->tone = STRALLOC("condescendingly"); break;
case 19: ch->tone = STRALLOC("confidently"); break;
case 20: ch->tone = STRALLOC("confusedly"); break;
case 21: ch->tone = STRALLOC("coyly"); break;
case 22: ch->tone = STRALLOC("crypticly"); break;
case 23: ch->tone = STRALLOC("darkly"); break;
case 24: ch->tone = STRALLOC("deeply"); break;
case 25: ch->tone = STRALLOC("disapprovingly"); break;
case 26: ch->tone = STRALLOC("dismissively"); break;
case 27: ch->tone = STRALLOC("dreamily"); break;
case 28: ch->tone = STRALLOC("dubiously"); break;
case 29: ch->tone = STRALLOC("emphaticly"); break;
case 30: ch->tone = STRALLOC("encouragingly"); break;
case 31: ch->tone = STRALLOC("exasperatedly"); break;
case 32: ch->tone = STRALLOC("excitedly"); break;
case 33: ch->tone = STRALLOC("firmly"); break;
case 34: ch->tone = STRALLOC("flirtatiously"); break;
case 35: ch->tone = STRALLOC("frustratedly"); break;
case 36: ch->tone = STRALLOC("gleefully"); break;
case 37: ch->tone = STRALLOC("gratefully"); break;
case 38: ch->tone = STRALLOC("gravely"); break;
case 39: ch->tone = STRALLOC("greedily"); break;
case 40: ch->tone = STRALLOC("grimly"); break;
case 41: ch->tone = STRALLOC("grumpily"); break;
case 42: ch->tone = STRALLOC("happily"); break;
case 43: ch->tone = STRALLOC("harshly"); break;
case 44: ch->tone = STRALLOC("haughtily"); break;
case 45: ch->tone = STRALLOC("hesitantly"); break;
case 46: ch->tone = STRALLOC("hopefully"); break;
case 47: ch->tone = STRALLOC("innocently"); break;
case 48: ch->tone = STRALLOC("jokingly"); break;
case 49: ch->tone = STRALLOC("jubilantly"); break;
case 50: ch->tone = STRALLOC("knowingly"); break;
case 51: ch->tone = STRALLOC("meekly"); break;
case 52: ch->tone = STRALLOC("melodicly"); break;
case 53: ch->tone = STRALLOC("menacingly"); break;
case 54: ch->tone = STRALLOC("merrily"); break;
case 55: ch->tone = STRALLOC("mockingly"); break;
case 56: ch->tone = STRALLOC("monotonously"); break;
case 57: ch->tone = STRALLOC("mournfully"); break;
case 58: ch->tone = STRALLOC("mysteriously"); break;
case 59: ch->tone = STRALLOC("nervously"); break;
case 60: ch->tone = STRALLOC("patiently"); break;
case 61: ch->tone = STRALLOC("pedanticly"); break;
case 62: ch->tone = STRALLOC("playfully"); break;
case 63: ch->tone = STRALLOC("proudly"); break;
case 64: ch->tone = STRALLOC("quickly"); break;
case 65: ch->tone = STRALLOC("quietly"); break;
case 66: ch->tone = STRALLOC("regretfully"); break;
case 67: ch->tone = STRALLOC("remorsefully"); break;
case 68: ch->tone = STRALLOC("rudely"); break;
case 69: ch->tone = STRALLOC("sadly"); break;
case 70: ch->tone = STRALLOC("sarcasticly"); break;
case 71: ch->tone = STRALLOC("seductively"); break;
case 72: ch->tone = STRALLOC("serenely"); break;
case 73: ch->tone = STRALLOC("sheepishly"); break;
case 74: ch->tone = STRALLOC("skeptically"); break;
case 75: ch->tone = STRALLOC("sleepily"); break;
case 76: ch->tone = STRALLOC("slowly"); break;
case 77: ch->tone = STRALLOC("slyly"); break;
case 78: ch->tone = STRALLOC("smugly"); break;
case 79: ch->tone = STRALLOC("softly"); break;
case 80: ch->tone = STRALLOC("somberly"); break;
case 81: ch->tone = STRALLOC("spitefully"); break;
case 82: ch->tone = STRALLOC("squeakily"); break;
case 83: ch->tone = STRALLOC("sternly"); break;
case 84: ch->tone = STRALLOC("stupidly"); break;
case 85: ch->tone = STRALLOC("sweetly"); break;
case 86: ch->tone = STRALLOC("tactfully"); break;
case 87: ch->tone = STRALLOC("teasingly"); break;
case 88: ch->tone = STRALLOC("tenderly"); break;
case 89: ch->tone = STRALLOC("tersely"); break;
case 90: ch->tone = STRALLOC("thoughtfully"); break;
case 91: ch->tone = STRALLOC("tiredly"); break;
case 92: ch->tone = STRALLOC("understandingly"); break;
case 93: ch->tone = STRALLOC("uneasily"); break;
case 94: ch->tone = STRALLOC("warmly"); break;
case 95: ch->tone = STRALLOC("warily"); break;
case 96: ch->tone = STRALLOC("weakly"); break;
case 97: ch->tone = STRALLOC("wearily"); break;
case 98: ch->tone = STRALLOC("wistfully"); break;
case 99: ch->tone = STRALLOC("worridly"); break;
case 100: ch->tone = STRALLOC("wryly"); break;
}
if ( (( ch->tone ) == NULL ) || ( strlen( ch->tone ) < 1 ) )
{
send_to_char( "Tone of voice: not set.\n\r", ch );
}
else
{
ch_printf(ch, "Tone setting: %s\n\r",ch->tone );
}
return;
}
void show_movements ( CHAR_DATA *ch )
{
send_to_char( "Syntax: movement <#>\n\r\n\r", ch );
send_to_char( "movement types:\n\r", ch );
send_to_char( "(1) none (2) walk (3) stride (4) strut\n\r", ch );
send_to_char( "(5) skip (6) hop (7) limp (8) crawl\n\r", ch );
send_to_char( "(9) slink (10) waddle (11) scamper (12) stroll\n\r", ch );
}
/*
* Adds some style to pc movement
* General list for both pc and mobs for now...
*/
void do_movement( CHAR_DATA *ch , char *argument )
{
char arg[MIL];
int number;
argument = one_argument( argument, arg );
if ( arg[0] == '\0' )
{
show_movements( ch );
return;
}
if ( is_number(arg) )
{
number = atoi(arg);
}
else
{
show_movements( ch );
return;
}
if (ch->movement)
STRFREE(ch->movement);
switch( number )
{
default: ch->movement = STRALLOC(""); break;
case 1: ch->movement = STRALLOC(""); break;
case 2: ch->movement = STRALLOC("walks"); break;
case 3: ch->movement = STRALLOC("strides"); break;
case 4: ch->movement = STRALLOC("struts"); break;
case 5: ch->movement = STRALLOC("skips"); break;
case 6: ch->movement = STRALLOC("hops"); break;
case 7: ch->movement = STRALLOC("limps"); break;
case 8: ch->movement = STRALLOC("crawls"); break;
case 9: ch->movement = STRALLOC("slinks"); break;
case 10: ch->movement = STRALLOC("waddles"); break;
case 11: ch->movement = STRALLOC("scampers"); break;
case 12: ch->movement = STRALLOC("strolls"); break;
}
if (!ch->movement || (ch->movement && ch->movement[0] == '\0'))
send_to_char( "Movement setting: none\n\r", ch );
else
ch_printf(ch, "Movement setting: %s",ch->movement );
return;
}
/*
* Show off your objects to other folks
*/
void do_show( CHAR_DATA *ch, char *argument )
{
char arg1 [MIL];
char arg2 [MIL];
CHAR_DATA *victim;
OBJ_DATA *obj;
argument = one_argument( argument, arg1 );
argument = one_argument( argument, arg2 );
if ( !str_cmp( arg2, "to" ) && argument[0] != '\0' )
argument = one_argument( argument, arg2 );
if ( arg1[0] == '\0' || arg2[0] == '\0' )
{
send_to_char( "show what to whom?\n\r", ch );
return;
}
if ( ( obj = get_obj_list( ch, arg1, ch->first_carrying )) == NULL )
{
send_to_char( "You do not have that item.\n\r", ch );
return;
}
if ( ( victim = get_char_room( ch, arg2 ) ) == NULL )
{
send_to_char( "They aren't here.\n\r", ch );
return;
}
if ( !can_see_obj( victim, obj ) )
{
act( AT_PLAIN, "$N can't see it.", ch, NULL, victim, TO_CHAR );
return;
}
act(AT_ACTION, "$n shows you $p.", ch, obj, victim, TO_VICT );
act(AT_ACTION, "You show $p to $N.", ch, obj, victim, TO_CHAR );
oprog_examine_trigger( victim, obj );
return;
}
/** Insult Support **/
char *const insult1[4] =
{
"Thou", "You", "You are a", "You're a"
};
char *const insult2[27] =
{
"reeky", "shallow", "goatish", "deranged", "deviant", "three-eyed",
"snivelling", "bug-eyed", "loathsome", "dankish", "bootless", "frothy",
"rank", "gore-bellied", "artless", "lumpish", "puny", "gleeking",
"warped", "mangled", "vain", "ugly", "muddle-headed", "butter-bellied",
"scummy", "savage", "uneducated"
};
char *const insult3[27] =
{
"excuse for a", "nauseating", "rump-fed", "flap-mouthed", "onion-eyed", "disease-ridden",
"fly-bitten", "pox-marked", "toad-spotted", "elf-skinned", "dungeon-eared", "beetle-headed",
"dismal-lookin'", "reeling-ripe", "cross-eyed", "two-faced", "thick-skulled", "disease-ridden",
"blitherin'", "slack-gutted", "blathering", "second-hand", "inadequate", "bungling", "infested",
"putrid", "flea-bitten"
};
char *const insult4[27] =
{
"toad", "lewdster", "toe-picker", "frog-boil", "toad-licker", "maggot",
"scum-bag", "nobody", "bugbear", "malt-worm", "horn-beast", "flax-wench",
"harpy", "lout", "hack", "rat", "varlet", "hedge-pig",
"idiot", "scoundrel", "oaf", "tub-bucket", "buffoon", "fraud", "scalawag",
"slug", "fungus"
};
/*
* You insult yourself 'You loathsome dismal-lookin' toad-licker!'
*/
void do_insults( CHAR_DATA *ch, char *argument )
{
char arg [MIL];
char buf [MSL];
CHAR_DATA *victim;
char *insult_one;
char *insult_two;
char *insult_three;
char *insult_four;
int rand;
argument = one_argument( argument, arg );
if ( arg[0] == '\0' )
{
send_to_char( "Insult who?\n\r", ch );
return;
}
if ( ( victim = get_char_room( ch, arg ) ) == NULL )
{
send_to_char( "They aren't here.\n\r", ch );
return;
}
rand = number_range( 0, 3 );
insult_one = insult1[rand];
rand = number_range( 0, 26 );
insult_two = insult2[rand];
rand = number_range( 0, 26 );
insult_three = insult3[rand];
rand = number_range( 0, 26 );
insult_four = insult4[rand];
sprintf (buf, "%s %s %s %s!",insult_one, insult_two, insult_three, insult_four );
if ( ch == victim )
{
act(AT_SAY, "You insult yourself '&w$t&D'", ch, buf, victim, TO_CHAR);
act(AT_SAY, "$n insults $mself '&w$t&D'", ch, buf, victim, TO_NOTVICT);
}
else
{
act(AT_SAY, "You insult $N '&w$t&D'", ch, buf, victim, TO_CHAR);
act(AT_SAY, "$n insults you '&w$t&D'", ch, buf, victim, TO_VICT);
act(AT_SAY, "$n insults $N '&w$t&D'", ch, buf, victim, TO_NOTVICT);
}
return;
}