asgard/
asgard/.settings/
asgard/area/
asgard/data/clans/
asgard/data/clans/history/
asgard/data/rosters/
asgard/src/notice/
/***************************************************************************
 *  Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer,        *
 *  Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, and Katja Nyboe.   *
 *                                                                         *
 *  Merc Diku Mud improvments copyright (C) 1992, 1993 by Michael          *
 *  Chastain, Michael Quan, and Mitchell Tse.                              *
 *                                                                         *
 *  Envy Diku Mud improvements copyright (C) 1994 by Michael Quan, David   *
 *  Love, Guilherme 'Willie' Arnold, and Mitchell Tse.                     *
 *                                                                         *
 *  EnvyMud 2.0 improvements copyright (C) 1995 by Michael Quan and        *
 *  Mitchell Tse.                                                          *
 *                                                                         *
 *  In order to use any part of this Envy Diku Mud, you must comply with   *
 *  the original Diku license in 'license.doc', the Merc license in        *
 *  'license.txt', as well as the Envy license in 'license.nvy'.           *
 *  In particular, you may not remove either of these copyright notices.   *
 *                                                                         *
 *  Much time and thought has gone into this software and you are          *
 *  benefitting.  We hope that you share your changes too.  What goes      *
 *  around, comes around.                                                  *
 ***************************************************************************/

#if defined( macintosh )
#include <types.h>
#else
#include <sys/types.h>
#include <sys/time.h>
#endif
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <ctype.h>                /* for toupper etc */
#include "merc.h"
#include "recycle.h"
#include "tables.h"

/* How to make a string look drunk... by Apex (robink@htsa.hva.nl) */
/* Modified and enhanced for envy(2) by the Maniac from Mythran */
/* Modified for ROT by Sauron from TIP */

char * makedrunk(CHAR_DATA * ch, char *string)
{
	/* This structure defines all changes for a character */
	struct struckdrunk
			drunk[] =
			{
					{ 3, 10,
					{ "a", "a", "a", "A", "aa", "ah", "Ah", "ao", "aw", "oa",
							"ahhhh" } },
					{ 8, 5,
					{ "b", "b", "b", "B", "B", "vb" } },
					{ 3, 5,
					{ "c", "c", "C", "cj", "sj", "zj" } },
					{ 5, 2,
					{ "d", "d", "D" } },
					{ 3, 3,
					{ "e", "e", "eh", "E" } },
					{ 4, 5,
					{ "f", "f", "ff", "fff", "fFf", "F" } },
					{ 8, 2,
					{ "g", "g", "G" } },
					{ 9, 6,
					{ "h", "h", "hh", "hhh", "Hhh", "HhH", "H" } },
					{ 7, 6,
					{ "i", "i", "Iii", "ii", "iI", "Ii", "I" } },
					{ 9, 5,
					{ "j", "j", "jj", "Jj", "jJ", "J" } },
					{ 7, 2,
					{ "k", "k", "K" } },
					{ 3, 2,
					{ "l", "l", "L" } },
					{ 5, 8,
							{ "m", "m", "mm", "mmm", "mmmm", "mmmmm", "MmM",
									"mM", "M" } },
					{ 6, 6,
					{ "n", "n", "nn", "Nn", "nnn", "nNn", "N" } },
					{ 6, 6,
					{ "n", "n", "nn", "Nn", "nnn", "nNn", "N" } },
					{ 3, 6,
					{ "o", "o", "ooo", "ao", "aOoo", "Ooo", "ooOo" } },
					{ 3, 2,
					{ "p", "p", "P" } },
					{ 5, 5,
					{ "q", "q", "Q", "ku", "ququ", "kukeleku" } },
					{ 4, 2,
					{ "r", "r", "R" } },
					{ 2, 5,
					{ "s", "ss", "zzZzssZ", "ZSssS", "sSzzsss", "sSss" } },
					{ 5, 2,
					{ "t", "t", "T" } },
					{ 3, 6,
					{ "u", "u", "uh", "Uh", "Uhuhhuh", "uhU", "uhhu" } },
					{ 4, 2,
					{ "v", "v", "V" } },
					{ 4, 2,
					{ "w", "w", "W" } },
					{ 5, 6,
					{ "x", "x", "X", "ks", "iks", "kz", "xz" } },
					{ 3, 2,
					{ "y", "y", "Y" } },
					{ 2, 9,
					{ "z", "z", "ZzzZz", "Zzz", "Zsszzsz", "szz", "sZZz",
							"ZSz", "zZ", "Z" } } };

	char buf[MAX_INPUT_LENGTH];
	char temp;
	int pos = 0;
	int drunklevel;
	int randomnum;

	/* Check how drunk a person is... */
	if (IS_NPC(ch))
		drunklevel = 0;
	else
		drunklevel = ch->pcdata->condition[COND_DRUNK];

	if (drunklevel > 0)
	{
		do
		{
			temp = toupper(*string);
			if ((temp >= 'A') && (temp <= 'Z'))
			{
				if (drunklevel > drunk[temp - 'A'].min_drunk_level)
				{
					randomnum
							= number_range(0, drunk[temp - 'A'].number_of_rep);
					strcpy(&buf[pos], drunk[temp - 'A'].replacement[randomnum]);
					pos += strlen(drunk[temp - 'A'].replacement[randomnum]);
				}
				else
					buf[pos++] = *string;
			}
			else
			{
				if ((temp >= '0') && (temp <= '9'))
				{
					temp = '0' + number_range(0, 9);
					buf[pos++] = temp;
				}
				else
					buf[pos++] = *string;
			}
		} while (*string++ && pos < MAX_INPUT_LENGTH - 1);
		buf[pos] = '\0'; /* Mark end of the string... */
		strcpy(string, buf);
		return (string);
	}
	return (string);
}