/***************************************************************************
* 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. *
* *
* In order to use any part of this Merc Diku Mud, you must comply with *
* both the original Diku license in 'license.doc' as well the Merc *
* license in 'license.txt'. In particular, you may not remove either of *
* these copyright notices. *
* *
* Dystopia Mud improvements copyright (C) 2000, 2001 by Brian Graversen *
* *
* 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. *
***************************************************************************/
/***************************************************************************
* _/ _/ *
* _/_/_/ _/_/ _/_/_/ _/ _/_/ _/ _/ _/_/_/ *
* _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ *
* _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ *
* _/ _/ _/ _/_/_/ _/ _/_/ _/_/_/ _/_/_/ *
***************************************************************************
* Mindcloud Copyright 2001-2003 by Jeff Boschee (Zarius), *
* Additional credits are in the help file CODECREDITS *
* All Rights Reserved. *
***************************************************************************/
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "merc.h"
#include "interp.h"
bool is_rel_power args((CHAR_DATA * ch, int power));
int get_rel_price args((CHAR_DATA * ch, int power));
char *get_player_health args((CHAR_DATA * ch));
char *get_player_health(CHAR_DATA * ch)
{
static char buf[512];
buf[0] = '\0';
if (ch->hit >= ch->max_hit)
strcat(buf, " perfect");
else if (ch->hit >= ch->max_hit * 0.75)
strcat(buf, " fine");
else if (ch->hit >= ch->max_hit * 0.50)
strcat(buf, " fair");
else
strcat(buf, " poor");
return (buf[0] != '\0') ? buf + 1 : "no";
}
void do_forsake(CHAR_DATA * ch, char *argument)
{
char buf[MAX_STRING_LENGTH];
if (IS_NPC(ch))
return;
if (ch->pcdata->religion == 0)
{
send_to_char("You are not worshipping any deity.\n\r", ch);
REMOVE_BIT(ch->special, SPC_HAS_CHOSEN_RELIGION);
return;
}
if (argument[0] == '\0')
{
send_to_char("Syntax : forsake <your password>\n\r", ch);
send_to_char
("WARNING : You will lose all religion powers.\n\r",
ch);
return;
}
if (strcmp(crypt(argument, ch->pcdata->pwd), ch->pcdata->pwd))
{
send_to_char("Illegal password.\n\r", ch);
WAIT_STATE(ch, 12);
return;
}
if (ch->pcdata->relrank == 0)
{
send_to_char
("You cannot forsake your religion unless you are at rank 2 or better.\n\r",
ch);
return;
}
if (ch->pcdata->religion == RELIGION_GAHR)
xprintf(buf, "%s has forsaken The Mad God", ch->name);
else if (ch->pcdata->religion == RELIGION_WILD)
xprintf(buf, "%s has forsaken the Call of the Wild",
ch->name);
else if (ch->pcdata->religion == RELIGION_STARS)
xprintf(buf, "%s has forsaken the Path of the Stars",
ch->name);
else if (ch->pcdata->religion == RELIGION_LOA)
xprintf(buf, "%s has forsaken the Serpent God", ch->name);
else if (ch->pcdata->religion == RELIGION_ONE)
xprintf(buf, "%s has forsaken the crusade of The One True",
ch->name);
else
xprintf(buf, "Bogus religion - forsaken");
do_info(ch, buf);
REMOVE_BIT(ch->special, SPC_HAS_CHOSEN_RELIGION);
ch->pcdata->religion = 0;
ch->pcdata->faith = 0;
ch->pcdata->current_faith = 0;
ch->pcdata->rel_powers = 0;
return;
}
void do_worship(CHAR_DATA * ch, char *argument)
{
char buf[MAX_STRING_LENGTH];
char arg[MAX_INPUT_LENGTH];
int i, start;
bool found = FALSE;
one_argument(argument, arg);
if (IS_NPC(ch))
return;
if (ch->level > 6)
start = 0;
else
start = 1;
if (IS_SET(ch->special, SPC_HAS_CHOSEN_RELIGION) && ch->level < 7)
{
send_to_char("You are already worhipping a deity.\n\r", ch);
return;
}
if (!IS_SET(ch->newbits, NEW_MASTERY))
{
send_to_char
("You need to master yourself before you can dedicate yourself to one god.\n\r",
ch);
return;
}
if (arg[0] == '\0')
{
send_to_char("Which religion do you wish to worship?\n\r",
ch);
for (i = start; i <= MAX_RELIGIONS; i++)
{
xprintf(buf, "%s\n\r", religion_table[i].truename);
send_to_char(buf, ch);
}
return;
}
for (i = start; i <= MAX_RELIGIONS && !found; i++)
{
if (!str_cmp(arg, religion_table[i].truename))
found = TRUE;
}
if (!found)
{
do_worship(ch, "");
return;
}
else
{
ch->pcdata->religion = i - 1;
SET_BIT(ch->special, SPC_HAS_CHOSEN_RELIGION);
xprintf(buf,
"You are now known as %s %s among your fellow worshippers.\n\r",
religion_table[ch->pcdata->religion].rankname[0],
religion_table[ch->pcdata->religion].name);
send_to_char(buf, ch);
return;
}
return;
}
void do_setdecap(CHAR_DATA * ch, char *argument)
{
char buf[MAX_STRING_LENGTH];
int cost = 1500;
if (IS_NPC(ch))
return;
if (ch->pcdata->religion == 0)
{
send_to_char("You are not worshipping any deity.\n\r", ch);
return;
}
if (IS_SET(ch->pcdata->jflags, JFLAG_NOSET))
{
send_to_char("Your not allowed to use custom settings.\n\r",
ch);
return;
}
if (ch->bones < cost)
{
xprintf(buf,
"You need %d more bones to use this command.\n\r",
cost - ch->bones);
send_to_char(buf, ch);
return;
}
smash_tilde(argument);
if (strlen(argument) < 10 || strlen(argument) > 90)
{
send_to_char("Between 10 and 90 chars... thanks.\n\r", ch);
return;
}
if (!is_contained2("$n", argument) || !is_contained2("$N", argument))
{
send_to_char
("You really need to include both $n and $N in the message.\n\r",
ch);
return;
}
if (!IS_SET(ch->pcdata->jflags, JFLAG_SETDECAP))
SET_BIT(ch->pcdata->jflags, JFLAG_SETDECAP);
free_string(ch->pcdata->decapmessage);
ch->pcdata->decapmessage = str_dup(argument);
ch->bones -= cost;
send_to_char("done.\n\r", ch);
return;
}
void do_settie(CHAR_DATA * ch, char *argument)
{
char buf[MAX_STRING_LENGTH];
int cost = 1500;
if (IS_NPC(ch))
return;
if (ch->pcdata->religion == 0)
{
send_to_char("You are not worshipping any deity.\n\r", ch);
return;
}
if (IS_SET(ch->pcdata->jflags, JFLAG_NOSET))
{
send_to_char("Your not allowed to use custom settings.\n\r",
ch);
return;
}
if (ch->bones < cost)
{
xprintf(buf,
"You need %d more bones to use this command.\n\r",
cost - ch->bones);
send_to_char(buf, ch);
return;
}
smash_tilde(argument);
if (strlen(argument) < 10 || strlen(argument) > 90)
{
send_to_char("Between 10 and 90 chars... thanks.\n\r", ch);
return;
}
if (!is_contained2("$n", argument) || !is_contained2("$N", argument))
{
send_to_char
("You really need to include both $n and $N in the message.\n\r",
ch);
return;
}
if (!IS_SET(ch->pcdata->jflags, JFLAG_SETTIE))
SET_BIT(ch->pcdata->jflags, JFLAG_SETTIE);
free_string(ch->pcdata->tiemessage);
ch->pcdata->tiemessage = str_dup(argument);
ch->bones -= cost;
send_to_char("done.\n\r", ch);
return;
}
void do_setlogout(CHAR_DATA * ch, char *argument)
{
char buf[MAX_STRING_LENGTH];
int cost = 1500;
if (IS_NPC(ch))
return;
if (ch->pcdata->religion == 0)
{
send_to_char("You are not worshipping any deity.\n\r", ch);
return;
}
if (IS_SET(ch->pcdata->jflags, JFLAG_NOSET))
{
send_to_char("Your not allowed to use custom settings.\n\r",
ch);
return;
}
if (ch->bones < cost)
{
xprintf(buf,
"You need %d more bones to use this command.\n\r",
cost - ch->bones);
send_to_char(buf, ch);
return;
}
smash_tilde(argument);
if (strlen(argument) < 10 || strlen(argument) > 90)
{
send_to_char("Between 10 and 90 chars... thanks.\n\r", ch);
return;
}
if (!is_contained2("$n", argument))
{
send_to_char
("You really need to include $n in the message.\n\r",
ch);
return;
}
if (!IS_SET(ch->pcdata->jflags, JFLAG_SETLOGOUT))
SET_BIT(ch->pcdata->jflags, JFLAG_SETLOGOUT);
free_string(ch->pcdata->logoutmessage);
ch->pcdata->logoutmessage = str_dup(argument);
ch->bones -= cost;
send_to_char("done.\n\r", ch);
return;
}
void do_setlogin(CHAR_DATA * ch, char *argument)
{
char buf[MAX_STRING_LENGTH];
int cost = 1500;
if (IS_NPC(ch))
return;
if (ch->pcdata->religion == 0)
{
send_to_char("You are not worshipping any deity.\n\r", ch);
return;
}
if (IS_SET(ch->pcdata->jflags, JFLAG_NOSET))
{
send_to_char("Your not allowed to use custom settings.\n\r",
ch);
return;
}
if (ch->bones < cost)
{
xprintf(buf,
"You need %d more bones to use this command.\n\r",
cost - ch->bones);
send_to_char(buf, ch);
return;
}
smash_tilde(argument);
if (strlen(argument) < 10 || strlen(argument) > 90)
{
send_to_char("Between 10 and 90 chars... thanks.\n\r", ch);
return;
}
if (!is_contained2("$n", argument))
{
send_to_char
("You really need to include $n in the message.\n\r",
ch);
return;
}
if (!IS_SET(ch->pcdata->jflags, JFLAG_SETLOGIN))
SET_BIT(ch->pcdata->jflags, JFLAG_SETLOGIN);
free_string(ch->pcdata->loginmessage);
ch->pcdata->loginmessage = str_dup(argument);
ch->bones -= cost;
send_to_char("done.\n\r", ch);
return;
}
void do_setavatar(CHAR_DATA * ch, char *argument)
{
char buf[MAX_STRING_LENGTH];
int cost = 1500;
if (IS_NPC(ch))
return;
if (ch->pcdata->religion == 0)
{
send_to_char("You are not worshipping any deity.\n\r", ch);
return;
}
if (IS_SET(ch->pcdata->jflags, JFLAG_NOSET))
{
send_to_char("Your not allowed to use custom settings.\n\r",
ch);
return;
}
if (ch->bones < cost)
{
xprintf(buf,
"You need %d more bones to use this command.\n\r",
cost - ch->bones);
send_to_char(buf, ch);
return;
}
smash_tilde(argument);
if (strlen(argument) < 10 || strlen(argument) > 90)
{
send_to_char("Between 10 and 90 chars... thanks.\n\r", ch);
return;
}
if (!is_contained2("$n", argument))
{
send_to_char
("You really need to include $n in the message.\n\r",
ch);
return;
}
if (!IS_SET(ch->pcdata->jflags, JFLAG_SETAVATAR))
SET_BIT(ch->pcdata->jflags, JFLAG_SETAVATAR);
free_string(ch->pcdata->avatarmessage);
ch->pcdata->avatarmessage = str_dup(argument);
ch->bones -= cost;
send_to_char("done.\n\r", ch);
return;
}
/*
* Here comes the immortal commands in regard to religions
*/
/*
* Use this call with caution, you CAN crash the mud with illegal calls.
*/
void do_relset(CHAR_DATA * ch, char *argument)
{
char arg1[MAX_INPUT_LENGTH];
char arg2[MAX_INPUT_LENGTH];
int id;
argument = one_argument(argument, arg1);
argument = one_argument(argument, arg2);
if (IS_NPC(ch))
return;
if (ch->level < MAX_LEVEL)
{
send_to_char("You don't have permission to change this.\n\r",
ch);
return;
}
if (arg1[0] == '\0' || arg2[0] == '\0' || argument[0] == '\0')
{
send_to_char
("#YThe syntax for relset is #G: #nrelset <id> <field> <value>#n\n\r\n\r",
ch);
send_to_char
("#0* #RId is the number of the religion (1-5)\n\r",
ch);
send_to_char
("#0* #RField is one of : #Gdecapmessage, name, truename, channel,#n\n\r",
ch);
send_to_char
(" #Grank1, rank2, rank3, rank4 or rank5.#n\n\r",
ch);
send_to_char
("#0* #RValue is the new value for that field.#n\n\r",
ch);
return;
}
if (!is_number(arg1))
{
do_relset(ch, "");
return;
}
if ((id = atoi(arg1)) < 1 || id > 5)
{
send_to_char("Between 1 and 5 please.\n\r", ch);
return;
}
if (!str_cmp(arg2, "decapmessage"))
{
free_string(religion_table[id].decapmessage);
religion_table[id].decapmessage = str_dup(argument);
}
else if (!str_cmp(arg2, "name"))
{
free_string(religion_table[id].name);
religion_table[id].name = str_dup(argument);
}
else if (!str_cmp(arg2, "truename"))
{
free_string(religion_table[id].truename);
religion_table[id].truename = str_dup(argument);
}
else if (!str_cmp(arg2, "channel"))
{
free_string(religion_table[id].channel);
religion_table[id].channel = str_dup(argument);
}
else if (!str_cmp(arg2, "rank1"))
{
free_string(religion_table[id].rankname[0]);
religion_table[id].rankname[0] = str_dup(argument);
}
else if (!str_cmp(arg2, "rank2"))
{
free_string(religion_table[id].rankname[1]);
religion_table[id].rankname[1] = str_dup(argument);
}
else if (!str_cmp(arg2, "rank3"))
{
free_string(religion_table[id].rankname[2]);
religion_table[id].rankname[2] = str_dup(argument);
}
else if (!str_cmp(arg2, "rank4"))
{
free_string(religion_table[id].rankname[3]);
religion_table[id].rankname[3] = str_dup(argument);
}
else if (!str_cmp(arg2, "rank5"))
{
free_string(religion_table[id].rankname[4]);
religion_table[id].rankname[4] = str_dup(argument);
}
else
{
send_to_char("No such field.\n\r", ch);
return;
}
save_religions();
send_to_char("Ok.\n\r", ch);
return;
}
void do_setrank(CHAR_DATA * ch, char *argument)
{
CHAR_DATA *victim;
char arg[MAX_INPUT_LENGTH];
int value;
argument = one_argument(argument, arg);
if (IS_NPC(ch))
return;
if (ch->level < MAX_LEVEL)
{
send_to_char("You don't have permission to change this.\n\r",
ch);
return;
}
if (arg[0] == '\0')
{
send_to_char("Set the rank of whom ?\n\r", ch);
return;
}
if ((victim = get_char_world(ch, arg)) == NULL)
{
send_to_char("They are not here.\n\r", ch);
return;
}
if (!is_number(argument))
{
send_to_char("Not a number.\n\r", ch);
return;
}
if ((value = atoi(argument)) < 1 || value > 5)
{
send_to_char("From one to five, please.\n\r", ch);
return;
}
victim->pcdata->relrank = value - 1;
send_to_char("Ok.\n\r", ch);
return;
}
void check_faith(CHAR_DATA * ch)
{
char buf[MAX_STRING_LENGTH];
if (IS_NPC(ch))
return;
if (ch->pcdata->religion == 0)
return;
if (ch->pcdata->faith < 100)
{
if (ch->pcdata->relrank > 0)
{
ch->pcdata->relrank = 0;
xprintf(buf,
"You have beed degraded to the title of %s %s\n\r",
religion_table[ch->pcdata->religion].
rankname[0],
religion_table[ch->pcdata->religion].name);
send_to_char(buf, ch);
}
}
else if (ch->pcdata->faith < 200)
{
if (ch->pcdata->relrank > 1)
{
ch->pcdata->relrank = 1;
xprintf(buf,
"You have beed degraded to the title of %s %s\n\r",
religion_table[ch->pcdata->religion].
rankname[1],
religion_table[ch->pcdata->religion].name);
send_to_char(buf, ch);
}
else if (ch->pcdata->relrank < 1)
{
ch->pcdata->relrank = 1;
xprintf(buf, "You have gained the title of %s %s\n\r",
religion_table[ch->pcdata->religion].
rankname[1],
religion_table[ch->pcdata->religion].name);
send_to_char(buf, ch);
}
}
else if (ch->pcdata->faith < 300)
{
if (ch->pcdata->relrank > 2)
{
ch->pcdata->relrank = 2;
xprintf(buf,
"You have beed degraded to the title of %s %s\n\r",
religion_table[ch->pcdata->religion].
rankname[2],
religion_table[ch->pcdata->religion].name);
send_to_char(buf, ch);
}
else if (ch->pcdata->relrank < 2)
{
ch->pcdata->relrank = 2;
xprintf(buf, "You have gained the title of %s %s\n\r",
religion_table[ch->pcdata->religion].
rankname[2],
religion_table[ch->pcdata->religion].name);
send_to_char(buf, ch);
}
}
else if (ch->pcdata->faith < 400)
{
if (ch->pcdata->relrank > 3)
{
ch->pcdata->relrank = 3;
xprintf(buf,
"You have beed degraded to the title of %s %s\n\r",
religion_table[ch->pcdata->religion].
rankname[3],
religion_table[ch->pcdata->religion].name);
send_to_char(buf, ch);
}
else if (ch->pcdata->relrank < 3)
{
ch->pcdata->relrank = 3;
xprintf(buf, "You have gained the title of %s %s\n\r",
religion_table[ch->pcdata->religion].
rankname[3],
religion_table[ch->pcdata->religion].name);
send_to_char(buf, ch);
}
}
else
{
if (ch->pcdata->relrank < 4)
{
ch->pcdata->relrank = 4;
xprintf(buf, "You have gained the title of %s %s\n\r",
religion_table[ch->pcdata->religion].
rankname[4],
religion_table[ch->pcdata->religion].name);
send_to_char(buf, ch);
}
}
return;
}
bool rel_oppose(CHAR_DATA * ch, CHAR_DATA * victim)
{
if (IS_NPC(ch) || IS_NPC(victim))
return FALSE;
if (ch->pcdata->religion == 0 || victim->pcdata->religion == 0)
return FALSE;
if (ch->pcdata->religion == 1)
{
if (victim->pcdata->religion == 2
|| victim->pcdata->religion == 3)
return TRUE;
}
else if (ch->pcdata->religion == 2)
{
if (victim->pcdata->religion == 1
|| victim->pcdata->religion == 4)
return TRUE;
}
else if (ch->pcdata->religion == 3)
{
if (victim->pcdata->religion == 1
|| victim->pcdata->religion == 5)
return TRUE;
}
else if (ch->pcdata->religion == 4)
{
if (victim->pcdata->religion == 2
|| victim->pcdata->religion == 5)
return TRUE;
}
else if (ch->pcdata->religion == 5)
{
if (victim->pcdata->religion == 3
|| victim->pcdata->religion == 4)
return TRUE;
}
return FALSE;
}
void do_relbuy(CHAR_DATA * ch, char *argument)
{
char arg[MAX_INPUT_LENGTH];
char buf[MAX_STRING_LENGTH];
char tempbuf[MAX_STRING_LENGTH];
int cost, power;
if (IS_NPC(ch))
return;
if (ch->pcdata->religion == 0)
{
send_to_char("You are not worshipping any deity.\n\r", ch);
return;
}
one_argument(argument, arg);
if (arg[0] == '\0')
{
xprintf(buf, "Power name price\n\r");
if (!IS_SET(ch->pcdata->rel_powers, REL_DARMOR))
{
xprintf(tempbuf,
"Divine Armor (darmor) %3d\n\r",
get_rel_price(ch, REL_DARMOR));
if (!is_rel_power(ch, REL_DARMOR))
ADD_COLOUR(ch, tempbuf, GREY);
strcat(buf, tempbuf);
}
if (!IS_SET(ch->pcdata->rel_powers, REL_HOLYWORD))
{
xprintf(tempbuf,
"Holyword (holyword) %3d\n\r",
get_rel_price(ch, REL_HOLYWORD));
if (!is_rel_power(ch, REL_HOLYWORD))
ADD_COLOUR(ch, tempbuf, GREY);
strcat(buf, tempbuf);
}
if (!IS_SET(ch->pcdata->rel_powers, REL_GZONE))
{
xprintf(tempbuf,
"Gods Zone (gzone) %3d\n\r",
get_rel_price(ch, REL_GZONE));
if (!is_rel_power(ch, REL_GZONE))
ADD_COLOUR(ch, tempbuf, GREY);
strcat(buf, tempbuf);
}
if (!IS_SET(ch->pcdata->rel_powers, REL_GAIA))
{
xprintf(tempbuf,
"Gaia's Blessing (gaia) %3d\n\r",
get_rel_price(ch, REL_GAIA));
if (!is_rel_power(ch, REL_GAIA))
ADD_COLOUR(ch, tempbuf, GREY);
strcat(buf, tempbuf);
}
if (!IS_SET(ch->pcdata->rel_powers, REL_THORNS))
{
xprintf(tempbuf,
"Thorns and Brambles (thorns) %3d\n\r",
get_rel_price(ch, REL_THORNS));
if (!is_rel_power(ch, REL_THORNS))
ADD_COLOUR(ch, tempbuf, GREY);
strcat(buf, tempbuf);
}
if (!IS_SET(ch->pcdata->rel_powers, REL_CALLWILD))
{
xprintf(tempbuf,
"Call of the Wild (callwild) %3d\n\r",
get_rel_price(ch, REL_CALLWILD));
if (!is_rel_power(ch, REL_CALLWILD))
ADD_COLOUR(ch, tempbuf, GREY);
strcat(buf, tempbuf);
}
if (!IS_SET(ch->pcdata->rel_powers, REL_DEJA))
{
xprintf(tempbuf,
"Deja-Vu (deja) %3d\n\r",
get_rel_price(ch, REL_DEJA));
if (!is_rel_power(ch, REL_DEJA))
ADD_COLOUR(ch, tempbuf, GREY);
strcat(buf, tempbuf);
}
if (!IS_SET(ch->pcdata->rel_powers, REL_PESTILENCE))
{
xprintf(tempbuf,
"Pestilence (pestilence) %3d\n\r",
get_rel_price(ch, REL_PESTILENCE));
if (!is_rel_power(ch, REL_PESTILENCE))
ADD_COLOUR(ch, tempbuf, GREY);
strcat(buf, tempbuf);
}
if (!IS_SET(ch->pcdata->rel_powers, REL_MADNESS))
{
xprintf(tempbuf,
"Induce Madness (madness) %3d\n\r",
get_rel_price(ch, REL_MADNESS));
if (!is_rel_power(ch, REL_MADNESS))
ADD_COLOUR(ch, tempbuf, GREY);
strcat(buf, tempbuf);
}
if (!IS_SET(ch->pcdata->rel_powers, REL_AREAHEAL))
{
xprintf(tempbuf,
"Area Heal (areaheal) %3d\n\r",
get_rel_price(ch, REL_AREAHEAL));
if (!is_rel_power(ch, REL_AREAHEAL))
ADD_COLOUR(ch, tempbuf, GREY);
strcat(buf, tempbuf);
}
if (!IS_SET(ch->pcdata->rel_powers, REL_BANISHMENT))
{
xprintf(tempbuf,
"Banishment (banishment) %3d\n\r",
get_rel_price(ch, REL_BANISHMENT));
if (!is_rel_power(ch, REL_BANISHMENT))
ADD_COLOUR(ch, tempbuf, GREY);
strcat(buf, tempbuf);
}
if (!IS_SET(ch->pcdata->rel_powers, REL_STARSIGHT))
{
xprintf(tempbuf,
"Starsight (starsight) %3d\n\r",
get_rel_price(ch, REL_STARSIGHT));
if (!is_rel_power(ch, REL_STARSIGHT))
ADD_COLOUR(ch, tempbuf, GREY);
strcat(buf, tempbuf);
}
if (!IS_SET(ch->pcdata->rel_powers, REL_RPURGE))
{
xprintf(tempbuf,
"Realms Purge (rpurge) %3d\n\r",
get_rel_price(ch, REL_RPURGE));
if (!is_rel_power(ch, REL_RPURGE))
ADD_COLOUR(ch, tempbuf, GREY);
strcat(buf, tempbuf);
}
if (!IS_SET(ch->pcdata->rel_powers, REL_DBATTLE))
{
xprintf(tempbuf,
"Divine Battle (dbattle) %3d\n\r",
get_rel_price(ch, REL_DBATTLE));
if (!is_rel_power(ch, REL_DBATTLE))
ADD_COLOUR(ch, tempbuf, GREY);
strcat(buf, tempbuf);
}
if (!IS_SET(ch->pcdata->rel_powers, REL_GFURY))
{
xprintf(tempbuf,
"Godly Fury (gfury) %3d\n\r",
get_rel_price(ch, REL_GFURY));
if (!is_rel_power(ch, REL_GFURY))
ADD_COLOUR(ch, tempbuf, GREY);
strcat(buf, tempbuf);
}
if (!IS_SET(ch->pcdata->rel_powers, REL_BADMOON))
{
xprintf(tempbuf,
"Bad Moon (badmoon) %3d\n\r",
get_rel_price(ch, REL_BADMOON));
if (!is_rel_power(ch, REL_BADMOON))
ADD_COLOUR(ch, tempbuf, GREY);
strcat(buf, tempbuf);
}
if (!IS_SET(ch->pcdata->rel_powers, REL_HDESIRE))
{
xprintf(tempbuf,
"The Hearts Desire (hdesire) %3d\n\r",
get_rel_price(ch, REL_HDESIRE));
if (!is_rel_power(ch, REL_HDESIRE))
ADD_COLOUR(ch, tempbuf, GREY);
strcat(buf, tempbuf);
}
if (!IS_SET(ch->pcdata->rel_powers, REL_DSCRY))
{
xprintf(tempbuf,
"Divine Scry (dscry) %3d\n\r",
get_rel_price(ch, REL_DSCRY));
if (!is_rel_power(ch, REL_DSCRY))
ADD_COLOUR(ch, tempbuf, GREY);
strcat(buf, tempbuf);
}
if (!IS_SET(ch->pcdata->rel_powers, REL_SUBVERT))
{
xprintf(tempbuf,
"Subvert (subvert) %3d\n\r",
get_rel_price(ch, REL_SUBVERT));
if (!is_rel_power(ch, REL_SUBVERT))
ADD_COLOUR(ch, tempbuf, GREY);
strcat(buf, tempbuf);
}
if (!IS_SET(ch->pcdata->rel_powers, REL_REBIRTH))
{
xprintf(tempbuf,
"Rebirth (rebirth) %3d\n\r",
get_rel_price(ch, REL_REBIRTH));
if (!is_rel_power(ch, REL_REBIRTH))
ADD_COLOUR(ch, tempbuf, GREY);
strcat(buf, tempbuf);
}
if (!IS_SET(ch->pcdata->rel_powers, REL_CHAOS))
{
xprintf(tempbuf,
"Chaotic Landscape (landscape) %3d\n\r",
get_rel_price(ch, REL_CHAOS));
if (!is_rel_power(ch, REL_CHAOS))
ADD_COLOUR(ch, tempbuf, GREY);
strcat(buf, tempbuf);
}
if (!IS_SET(ch->pcdata->rel_powers, REL_NOVA))
{
xprintf(tempbuf,
"Supernova (supernova) %3d\n\r",
get_rel_price(ch, REL_NOVA));
if (!is_rel_power(ch, REL_NOVA))
ADD_COLOUR(ch, tempbuf, GREY);
strcat(buf, tempbuf);
}
if (!IS_SET(ch->pcdata->rel_powers, REL_FARMOR))
{
xprintf(tempbuf,
"Armor of True Faith (farmor) %3d\n\r",
get_rel_price(ch, REL_FARMOR));
if (!is_rel_power(ch, REL_FARMOR))
ADD_COLOUR(ch, tempbuf, GREY);
strcat(buf, tempbuf);
}
send_to_char(buf, ch);
xprintf(buf, "\n\rFaith : %d/%d\n\r",
ch->pcdata->current_faith, ch->pcdata->faith);
send_to_char(buf, ch);
return;
}
if (!str_cmp(arg, "darmor"))
{
power = REL_DARMOR;
cost = get_rel_price(ch, power);
}
else if (!str_cmp(arg, "holyword"))
{
power = REL_HOLYWORD;
cost = get_rel_price(ch, power);
}
else if (!str_cmp(arg, "gzone"))
{
power = REL_GZONE;
cost = get_rel_price(ch, power);
}
else if (!str_cmp(arg, "gaia"))
{
power = REL_GAIA;
cost = get_rel_price(ch, power);
}
else if (!str_cmp(arg, "thorns"))
{
power = REL_THORNS;
cost = get_rel_price(ch, power);
}
else if (!str_cmp(arg, "callwild"))
{
power = REL_CALLWILD;
cost = get_rel_price(ch, power);
}
else if (!str_cmp(arg, "deja"))
{
power = REL_DEJA;
cost = get_rel_price(ch, power);
}
else if (!str_cmp(arg, "pestilence"))
{
power = REL_PESTILENCE;
cost = get_rel_price(ch, power);
}
else if (!str_cmp(arg, "madness"))
{
power = REL_MADNESS;
cost = get_rel_price(ch, power);
}
else if (!str_cmp(arg, "areaheal"))
{
power = REL_AREAHEAL;
cost = get_rel_price(ch, power);
}
else if (!str_cmp(arg, "banishment"))
{
power = REL_BANISHMENT;
cost = get_rel_price(ch, power);
}
else if (!str_cmp(arg, "starsight"))
{
power = REL_STARSIGHT;
cost = get_rel_price(ch, power);
}
else if (!str_cmp(arg, "rpurge"))
{
power = REL_RPURGE;
cost = get_rel_price(ch, power);
}
else if (!str_cmp(arg, "dbattle"))
{
power = REL_DBATTLE;
cost = get_rel_price(ch, power);
}
else if (!str_cmp(arg, "gfury"))
{
power = REL_GFURY;
cost = get_rel_price(ch, power);
}
else if (!str_cmp(arg, "supernova"))
{
power = REL_NOVA;
cost = get_rel_price(ch, power);
}
else if (!str_cmp(arg, "badmoon"))
{
power = REL_BADMOON;
cost = get_rel_price(ch, power);
}
else if (!str_cmp(arg, "hdesire"))
{
power = REL_HDESIRE;
cost = get_rel_price(ch, power);
}
else if (!str_cmp(arg, "dscry"))
{
power = REL_DSCRY;
cost = get_rel_price(ch, power);
}
else if (!str_cmp(arg, "subvert"))
{
power = REL_SUBVERT;
cost = get_rel_price(ch, power);
}
else if (!str_cmp(arg, "rebirth"))
{
power = REL_REBIRTH;
cost = get_rel_price(ch, power);
}
else if (!str_cmp(arg, "landscape"))
{
power = REL_CHAOS;
cost = get_rel_price(ch, power);
}
else if (!str_cmp(arg, "farmor"))
{
power = REL_FARMOR;
cost = get_rel_price(ch, power);
}
else
{
send_to_char("No such religion power.\n\r", ch);
return;
}
if (IS_SET(ch->pcdata->rel_powers, power))
{
send_to_char("You already have that religion power.\n\r", ch);
return;
}
if (ch->pcdata->current_faith < cost)
{
send_to_char
("Sorry, you cannot afford that religion power.\n\r",
ch);
return;
}
ch->pcdata->current_faith -= cost;
SET_BIT(ch->pcdata->rel_powers, power);
send_to_char("Ok.\n\r", ch);
return;
}
bool is_rel_power(CHAR_DATA * ch, int power)
{
switch (ch->pcdata->religion)
{
case RELIGION_LOA:
if (power == REL_HDESIRE)
return TRUE;
if (power == REL_DSCRY)
return TRUE;
if (power == REL_BADMOON)
return TRUE;
if (power == REL_SUBVERT)
return TRUE;
break;
case RELIGION_STARS:
if (power == REL_STARSIGHT)
return TRUE;
if (power == REL_BANISHMENT)
return TRUE;
if (power == REL_AREAHEAL)
return TRUE;
if (power == REL_NOVA)
return TRUE;
break;
case RELIGION_ONE:
if (power == REL_GFURY)
return TRUE;
if (power == REL_DBATTLE)
return TRUE;
if (power == REL_RPURGE)
return TRUE;
if (power == REL_FARMOR)
return TRUE;
break;
case RELIGION_WILD:
if (power == REL_THORNS)
return TRUE;
if (power == REL_CALLWILD)
return TRUE;
if (power == REL_GAIA)
return TRUE;
if (power == REL_REBIRTH)
return TRUE;
break;
case RELIGION_GAHR:
if (power == REL_PESTILENCE)
return TRUE;
if (power == REL_MADNESS)
return TRUE;
if (power == REL_DEJA)
return TRUE;
if (power == REL_CHAOS)
return TRUE;
break;
default:
bug("Bad Religion", 0);
break;
}
/*
* The powers that all can get
*/
if (power == REL_DARMOR)
return TRUE;
if (power == REL_HOLYWORD)
return TRUE;
if (power == REL_GZONE)
return TRUE;
/*
* None of the above, so it's not a power
*/
return FALSE;
}
int get_rel_price(CHAR_DATA * ch, int power)
{
int price;
int rank;
switch (power)
{
case REL_DARMOR:
case REL_HOLYWORD:
rank = 0;
price = 20;
break;
case REL_RPURGE:
case REL_GZONE:
case REL_GAIA:
case REL_DEJA:
case REL_AREAHEAL:
case REL_BADMOON:
rank = 1;
price = 40;
break;
case REL_THORNS:
case REL_CALLWILD:
case REL_PESTILENCE:
case REL_MADNESS:
case REL_BANISHMENT:
case REL_STARSIGHT:
case REL_DBATTLE:
case REL_GFURY:
case REL_HDESIRE:
case REL_DSCRY:
rank = 2;
price = 60;
break;
case REL_SUBVERT:
case REL_REBIRTH:
case REL_CHAOS:
case REL_NOVA:
case REL_FARMOR:
rank = 3;
price = 80;
break;
default: // bad power ??
rank = 10;
price = 2000;
break;
}
if (rank > ch->pcdata->relrank)
price *= 2;
if (!is_rel_power(ch, power))
price *= 2;
return price;
}
void do_gzone(CHAR_DATA * ch, char *argument)
{
AREA_AFFECT af;
AREA_DATA *pArea;
int cost = 10000;
if (IS_NPC(ch))
return;
if (ch->pcdata->religion == 0)
{
send_to_char("You are not worshipping any deity.\n\r", ch);
return;
}
if (!IS_SET(ch->pcdata->rel_powers, REL_GZONE))
{
send_to_char("You don't have that religion power.\n\r", ch);
return;
}
if (!IS_SET(ch->itemaffect, ITEMA_HOLYSYMBOL))
{
send_to_char("Where is your holy symbol?\n\r", ch);
return;
}
if ((pArea = ch->in_room->area) == NULL)
{
send_to_char("You cannot cast this spell in this place.\n\r",
ch);
return;
}
if (has_area_affect(pArea, AREA_AFF_GZONE, 0))
{
send_to_char
("This holy enchantment has already been invoked here.\n\r",
ch);
return;
}
if (ch->mana < cost)
{
send_to_char("You don't have enough mana.\n\r", ch);
return;
}
if (has_area_affect(pArea, AREA_AFF_CHAOS, 0))
{
if (number_range(1, 4) != 2)
{
int dam;
dam = number_range(10, 20);
dam *= ch->pcdata->current_faith; // wicked :)
ch->hit -= dam;
if (ch->hit < 1)
ch->hit = 1;
ch->mana -= cost;
send_to_char
("Your enchantment backfires, the spell is spoiled.\n\r",
ch);
WAIT_STATE(ch, 24);
return;
}
}
af.type = AREA_AFF_GZONE;
af.duration = ch->pcdata->faith / 10;
af.level = ch->pcdata->faith;
af.religion = ch->pcdata->religion;
affect_to_area(pArea, &af);
act("$n invokes the name of $s god, as $e lays the God's Zone enchantment.", ch, NULL, NULL, TO_ROOM);
send_to_char("You lay the God's Zone enchantment on this area.\n\r",
ch);
ch->mana -= cost;
WAIT_STATE(ch, 36);
return;
}
void do_darmor(CHAR_DATA * ch, char *argument)
{
int sn, cost = 5000;
if (IS_NPC(ch))
return;
if (ch->pcdata->religion == 0)
{
send_to_char("You are not worshipping any deity.\n\r", ch);
return;
}
if (!IS_SET(ch->pcdata->rel_powers, REL_DARMOR))
{
send_to_char("You don't have that religion power.\n\r", ch);
return;
}
if (!IS_SET(ch->itemaffect, ITEMA_HOLYSYMBOL))
{
send_to_char("Where is your holy symbol?\n\r", ch);
return;
}
if (ch->mana < cost)
{
send_to_char("You don't have enough mana.\n\r", ch);
return;
}
sn = skill_lookup("darmor");
if (sn > 0)
(*skill_table[sn].spell_fun) (sn, 50, ch, ch);
WAIT_STATE(ch, 6);
ch->mana -= cost;
return;
}
void do_holyword(CHAR_DATA * ch, char *argument)
{
CHAR_DATA *gch;
int cost = 5000;
int dam;
if (IS_NPC(ch))
return;
if (ch->pcdata->religion == 0)
{
send_to_char("You are not worshipping any deity.\n\r", ch);
return;
}
if (!IS_SET(ch->pcdata->rel_powers, REL_HOLYWORD))
{
send_to_char("You don't have that religion power.\n\r", ch);
return;
}
if (!IS_SET(ch->itemaffect, ITEMA_HOLYSYMBOL))
{
send_to_char("Where is your holy symbol?\n\r", ch);
return;
}
if (ch->mana < cost)
{
send_to_char("You don't have enough mana.\n\r", ch);
return;
}
if (IS_SET(ch->in_room->room_flags, ROOM_SAFE) && !ragnarok)
{
send_to_char("You cannot fight in a safe room.\n\r", ch);
return;
}
send_to_char("You utter a holyword.\n\r", ch);
act("$n utters a holyword.", ch, NULL, NULL, TO_ROOM);
for (gch = ch->in_room->people; gch; gch = gch->next_in_room)
{
if (!rel_oppose(ch, gch))
{
if (gch == ch)
continue;
send_to_char("You are unaffected.\n\r", gch);
continue;
}
if (IS_AFFECTED2(gch, AFF2_FARMOR))
{
act("The holy attack fizzles as it strikes $n's armor of faith.", gch, NULL, NULL, TO_ROOM);
act("The holy attack fizzles as it strikes your armor of faith.", gch, NULL, NULL, TO_CHAR);
continue;
}
send_to_char
("The perversion of the holyword strikes the very core of your soul.\n\r",
gch);
act("$N howls in pain, as the agony of $n's holyword strikes $s soul.", ch, NULL, gch, TO_NOTVICT);
act("$N howls in pain, as the agony of your holyword strikes $s soul.", ch, NULL, gch, TO_CHAR);
dam = UMIN(gch->hit - 1,
number_range(ch->pcdata->faith * 10,
ch->pcdata->faith * 20));
if (dam > 3000)
dam = number_range(2900, 3000);
gch->hit -= dam;
WAIT_STATE(gch, 12);
}
ch->mana -= cost;
WAIT_STATE(ch, 24);
return;
}
void do_thorns(CHAR_DATA * ch, char *argument)
{
AREA_AFFECT af;
AREA_DATA *pArea;
int cost = 15000;
if (IS_NPC(ch))
return;
if (ch->pcdata->religion == 0)
{
send_to_char("You are not worshipping any deity.\n\r", ch);
return;
}
if (!IS_SET(ch->pcdata->rel_powers, REL_THORNS))
{
send_to_char("You don't have that religion power.\n\r", ch);
return;
}
if (!IS_SET(ch->itemaffect, ITEMA_HOLYSYMBOL))
{
send_to_char("Where is your holy symbol?\n\r", ch);
return;
}
if ((pArea = ch->in_room->area) == NULL)
{
send_to_char("You cannot cast this spell in this place.\n\r",
ch);
return;
}
if (has_area_affect(pArea, AREA_AFF_THORNS, 0))
{
send_to_char
("This holy enchantment has already been invoked here.\n\r",
ch);
return;
}
if (ch->mana < cost)
{
send_to_char("You don't have enough mana.\n\r", ch);
return;
}
if (has_area_affect(pArea, AREA_AFF_CHAOS, 0))
{
if (number_range(1, 4) != 2)
{
int dam;
dam = number_range(10, 20);
dam *= ch->pcdata->current_faith; // wicked :)
ch->hit -= dam;
if (ch->hit < 1)
ch->hit = 1;
ch->mana -= cost;
send_to_char
("Your enchantment backfires, the spell is spoiled.\n\r",
ch);
WAIT_STATE(ch, 24);
return;
}
}
af.type = AREA_AFF_THORNS;
af.duration = ch->pcdata->faith / 10;
af.level = ch->pcdata->faith;
af.religion = ch->pcdata->religion;
affect_to_area(pArea, &af);
act("$n invokes the name of $s god, as $e lays the Thorns and Brambles enchantment.", ch, NULL, NULL, TO_ROOM);
send_to_char
("You lay the Thorns and Brambles enchantment on this area.\n\r",
ch);
ch->mana -= cost;
WAIT_STATE(ch, 36);
return;
}
void do_rpurge(CHAR_DATA * ch, char *argument)
{
int cost = 10000;
AREA_AFFECT *paf;
AREA_AFFECT *paf_next;
AREA_DATA *pArea;
bool found = FALSE;
if (IS_NPC(ch))
return;
if (ch->pcdata->religion == 0)
{
send_to_char("You are not worshipping any deity.\n\r", ch);
return;
}
if (!IS_SET(ch->pcdata->rel_powers, REL_RPURGE))
{
send_to_char("You don't have that religion power.\n\r", ch);
return;
}
if (!IS_SET(ch->itemaffect, ITEMA_HOLYSYMBOL))
{
send_to_char("Where is your holy symbol?\n\r", ch);
return;
}
if (ch->mana < cost)
{
send_to_char("You don't have enough mana.\n\r", ch);
return;
}
for (pArea = area_first; pArea; pArea = pArea->next)
{
for (paf = pArea->affects; paf; paf = paf_next)
{
paf_next = paf->next;
found = TRUE;
if ((ch->pcdata->faith > paf->level
&& number_percent() > 25)
|| number_percent() > 75)
{
send_to_char
("Found and destroyed a magical enchantment.\n\r",
ch);
area_affect_remove(pArea, paf);
}
else
send_to_char
("Found, but failed to destroy magical enchantment.\n\r",
ch);
}
}
if (!found)
{
send_to_char("No enchantments currently active.\n\r", ch);
return;
}
WAIT_STATE(ch, 18);
ch->mana -= cost;
return;
}
void do_deja(CHAR_DATA * ch, char *argument)
{
CHAR_DATA *victim;
int cost = 10000;
char *action;
if (IS_NPC(ch))
return;
if (ch->pcdata->religion == 0)
{
send_to_char("You are not worshipping any deity.\n\r", ch);
return;
}
if (!IS_SET(ch->pcdata->rel_powers, REL_DEJA))
{
send_to_char("You don't have that religion power.\n\r", ch);
return;
}
if (!IS_SET(ch->itemaffect, ITEMA_HOLYSYMBOL))
{
send_to_char("Where is your holy symbol?\n\r", ch);
return;
}
if (!TIME_UP(ch, TIMER_DEJAVU))
{
send_to_char
("Sorry, you can only use this power once every 2 hours.\n\r",
ch);
return;
}
if (ch->mana < cost)
{
send_to_char("You don't have enough mana.\n\r", ch);
return;
}
if ((victim = ch->fighting) == NULL)
{
send_to_char("You are not fighting anyone.\n\r", ch);
return;
}
if (IS_NPC(victim))
{
send_to_char("Not on mobiles.\n\r", ch);
return;
}
if (IS_AFFECTED2(victim, AFF2_FARMOR))
{
act("The unholy attack fizzles as it strikes $n's armor of faith.", victim, NULL, NULL, TO_ROOM);
act("The unholy attack fizzles as it strikes your armor of faith.", victim, NULL, NULL, TO_CHAR);
ch->mana -= cost;
SET_TIMER(ch, TIMER_DEJAVU, 2);
return;
}
if (!victim->desc)
{
send_to_char("Not on linkdead players.\n\r", ch);
return;
}
if (!victim->desc->inlast || strlen(victim->desc->inlast) < 2)
{
send_to_char
("But they haven't done anything yet that they can relive.\n\r",
ch);
return;
}
act("$n invokes the name of $s god, as he forces $N to relive $S past.", ch, NULL, victim, TO_ROOM);
act("You invoke your god, and $N relives $S past.", ch, NULL, victim,
TO_CHAR);
act("$n invokes the name of $s god, and you get a strange sense of deja-vu.", ch, NULL, victim, TO_VICT);
action = str_dup(victim->desc->inlast);
interpret(victim, action);
free_string(action);
ch->mana -= cost;
SET_TIMER(ch, TIMER_DEJAVU, 2);
WAIT_STATE(ch, 6);
return;
}
void do_holysymbol(CHAR_DATA * ch, char *argument)
{
OBJ_INDEX_DATA *pObjIndex;
OBJ_DATA *obj;
char buf[MAX_STRING_LENGTH];
char arg[MAX_INPUT_LENGTH];
int pcost = 500;
int bcost = 7000;
int type;
if (IS_NPC(ch))
return;
if (ch->pcdata->religion == 0)
{
send_to_char("You are not worshipping any deity.\n\r", ch);
return;
}
if (ch->practice < pcost)
{
xprintf(buf,
"Sorry, this costs %d primal, which you dont have.\n\r",
pcost);
send_to_char(buf, ch);
return;
}
if (ch->bones < bcost)
{
xprintf(buf,
"Sorry, this costs %d bones, which you dont have.\n\r",
bcost);
send_to_char(buf, ch);
return;
}
one_argument(argument, arg);
if (arg[0] == '\0')
{
send_to_char
("#0Which type of holy symbol do you wish to create ?#n\n\r\n\r",
ch);
send_to_char("#G Ring Bodyart Wield Float#n\n\r",
ch);
send_to_char("#G Mask Special Medal Amulet#n\n\r",
ch);
return;
}
if (!str_cmp(arg, "ring"))
type = ITEM_WEAR_FINGER;
else if (!str_cmp(arg, "bodyart"))
type = ITEM_WEAR_BODYART;
else if (!str_cmp(arg, "wield"))
type = ITEM_WIELD;
else if (!str_cmp(arg, "float"))
type = ITEM_WEAR_FLOAT;
else if (!str_cmp(arg, "mask"))
type = ITEM_WEAR_FACE;
else if (!str_cmp(arg, "special"))
type = ITEM_WEAR_SPECIAL;
else if (!str_cmp(arg, "medal"))
type = ITEM_WEAR_MEDAL;
else if (!str_cmp(arg, "amulet"))
type = ITEM_WEAR_NECK;
else
{
do_holysymbol(ch, "");
return;
}
if ((pObjIndex = get_obj_index(OBJ_VNUM_HOLYSYMBOL)) == NULL)
{
send_to_char("Missing object, please inform a God.\n\r", ch);
return;
}
obj = create_object(pObjIndex, 50);
obj->questowner = str_dup(ch->pcdata->switchname);
obj->ownerid = ch->pcdata->playerid;
obj->wear_flags = type + 1;
obj->value[0] = ch->pcdata->religion;
obj_to_char(obj, ch);
ch->practice -= pcost;
ch->bones -= bcost;
act("$p appears in your hands.", ch, obj, NULL, TO_CHAR);
act("$p appears in $n's hands.", ch, obj, NULL, TO_ROOM);
return;
}
void do_areaheal(CHAR_DATA * ch, char *argument)
{
CHAR_DATA *gch;
char buf[MAX_STRING_LENGTH];
int cost = 10000;
int heal;
if (IS_NPC(ch))
return;
if (ch->pcdata->religion == 0)
{
send_to_char("You are not worshipping any deity.\n\r", ch);
return;
}
if (!IS_SET(ch->pcdata->rel_powers, REL_AREAHEAL))
{
send_to_char("You don't have that religion power.\n\r", ch);
return;
}
if (!IS_SET(ch->itemaffect, ITEMA_HOLYSYMBOL))
{
send_to_char("Where is your holy symbol?\n\r", ch);
return;
}
if (ch->mana < cost)
{
send_to_char("You don't have enough mana.\n\r", ch);
return;
}
act("$n invokes the name of $s god, and calls for a blessing on everyone.", ch, NULL, NULL, TO_ROOM);
send_to_char
("You call upon your god to heal those who are true of heart.\n\r",
ch);
xprintf(buf,
"You feel a warm feeling run through your body, as %s fills you with healing.\n\r",
religion_table[ch->pcdata->religion].truename);
heal = number_range(ch->pcdata->faith * 15, ch->pcdata->faith * 30);
for (gch = char_list; gch; gch = gch->next)
{
if (IS_NPC(gch))
continue; // no monsters
if (rel_oppose(ch, gch))
continue; // no anti religions
if (!gch->in_room)
continue; // no room-less
if (gch->in_room->area != ch->in_room->area)
continue; // only same area
gch->hit += number_range(heal / 2, 3 * heal / 2);
if (gch->hit > gch->max_hit)
gch->hit = gch->max_hit;
send_to_char(buf, gch);
send_to_char("Your healing energies find a target.\n\r", ch);
}
ch->mana -= cost;
WAIT_STATE(ch, 12);
return;
}
void do_badmoon(CHAR_DATA * ch, char *argument)
{
AREA_AFFECT af;
AREA_DATA *pArea;
int cost = 10000;
if (IS_NPC(ch))
return;
if (ch->pcdata->religion == 0)
{
send_to_char("You are not worshipping any deity.\n\r", ch);
return;
}
if (!IS_SET(ch->pcdata->rel_powers, REL_BADMOON))
{
send_to_char("You don't have that religion power.\n\r", ch);
return;
}
if (!IS_SET(ch->itemaffect, ITEMA_HOLYSYMBOL))
{
send_to_char("Where is your holy symbol?\n\r", ch);
return;
}
if (!TIME_UP(ch, TIMER_BADMOON))
{
send_to_char
("You can only use this power once every 12 hours.\n\r",
ch);
return;
}
if ((pArea = ch->in_room->area) == NULL)
{
send_to_char("You cannot cast this spell in this place.\n\r",
ch);
return;
}
if (has_area_affect(pArea, AREA_AFF_BADMOON, 0))
{
send_to_char
("This holy enchantment has already been invoked here.\n\r",
ch);
return;
}
if (ch->mana < cost)
{
send_to_char("You don't have enough mana.\n\r", ch);
return;
}
if (has_area_affect(pArea, AREA_AFF_CHAOS, 0))
{
if (number_range(1, 4) != 2)
{
int dam;
dam = number_range(10, 20);
dam *= ch->pcdata->current_faith; // wicked :)
ch->hit -= dam;
if (ch->hit < 1)
ch->hit = 1;
ch->mana -= cost;
send_to_char
("Your enchantment backfires, the spell is spoiled.\n\r",
ch);
WAIT_STATE(ch, 24);
return;
}
}
af.type = AREA_AFF_BADMOON;
af.duration = ch->pcdata->faith / 10;
af.level = ch->pcdata->faith;
af.religion = ch->pcdata->religion;
affect_to_area(pArea, &af);
act("$n invokes the name of $s god, as $e lays the Bad Moon enchantment.", ch, NULL, NULL, TO_ROOM);
send_to_char("You lay the Bad Moon enchantment on this area.\n\r",
ch);
ch->mana -= cost;
SET_TIMER(ch, TIMER_BADMOON, 12);
WAIT_STATE(ch, 12);
return;
}
void do_relpowers(CHAR_DATA * ch, char *argument)
{
if (IS_NPC(ch))
return;
if (ch->pcdata->religion == 0)
{
send_to_char("You are not worshipping any deity.\n\r", ch);
return;
}
if (ch->pcdata->rel_powers == 0)
{
send_to_char("You don't have any religion powers.\n\r", ch);
return;
}
send_to_char("You have the following religion powers :\n\r", ch);
if (IS_SET(ch->pcdata->rel_powers, REL_DARMOR))
send_to_char(" * Divine Armor\n\r", ch);
if (IS_SET(ch->pcdata->rel_powers, REL_HOLYWORD))
send_to_char(" * Holyword\n\r", ch);
if (IS_SET(ch->pcdata->rel_powers, REL_RPURGE))
send_to_char(" * Realms Purge\n\r", ch);
if (IS_SET(ch->pcdata->rel_powers, REL_GZONE))
send_to_char(" * God's Zone\n\r", ch);
if (IS_SET(ch->pcdata->rel_powers, REL_GAIA))
send_to_char(" * Gaia's Blessing\n\r", ch);
if (IS_SET(ch->pcdata->rel_powers, REL_DEJA))
send_to_char(" * Deja-vu\n\r", ch);
if (IS_SET(ch->pcdata->rel_powers, REL_AREAHEAL))
send_to_char(" * Area-Heal\n\r", ch);
if (IS_SET(ch->pcdata->rel_powers, REL_BADMOON))
send_to_char(" * Bad Moon\n\r", ch);
if (IS_SET(ch->pcdata->rel_powers, REL_THORNS))
send_to_char(" * Thorns and Brambles\n\r", ch);
if (IS_SET(ch->pcdata->rel_powers, REL_CALLWILD))
send_to_char(" * Call of the Wild\n\r", ch);
if (IS_SET(ch->pcdata->rel_powers, REL_PESTILENCE))
send_to_char(" * Pestilence\n\r", ch);
if (IS_SET(ch->pcdata->rel_powers, REL_MADNESS))
send_to_char(" * Induce Madness\n\r", ch);
if (IS_SET(ch->pcdata->rel_powers, REL_BANISHMENT))
send_to_char(" * Banishment\n\r", ch);
if (IS_SET(ch->pcdata->rel_powers, REL_STARSIGHT))
send_to_char(" * Starsight\n\r", ch);
if (IS_SET(ch->pcdata->rel_powers, REL_DBATTLE))
send_to_char(" * Divine Battle\n\r", ch);
if (IS_SET(ch->pcdata->rel_powers, REL_GFURY))
send_to_char(" * Godly Fury\n\r", ch);
if (IS_SET(ch->pcdata->rel_powers, REL_HDESIRE))
send_to_char(" * The Hearts Desire\n\r", ch);
if (IS_SET(ch->pcdata->rel_powers, REL_DSCRY))
send_to_char(" * Divine Scry\n\r", ch);
if (IS_SET(ch->pcdata->rel_powers, REL_SUBVERT))
send_to_char(" * Subvert\n\r", ch);
if (IS_SET(ch->pcdata->rel_powers, REL_REBIRTH))
send_to_char(" * Rebirth\n\r", ch);
if (IS_SET(ch->pcdata->rel_powers, REL_CHAOS))
send_to_char(" * Chaotic Landscape\n\r", ch);
if (IS_SET(ch->pcdata->rel_powers, REL_NOVA))
send_to_char(" * Supernova\n\r", ch);
if (IS_SET(ch->pcdata->rel_powers, REL_FARMOR))
send_to_char(" * Armor of True Faith\n\r", ch);
return;
}
void do_hdesire(CHAR_DATA * ch, char *argument)
{
CHAR_DATA *victim;
char arg[MAX_INPUT_LENGTH];
char buf[MAX_STRING_LENGTH];
int cost = 15000;
if (IS_NPC(ch))
return;
if (ch->pcdata->religion == 0)
{
send_to_char("You are not worshipping any deity.\n\r", ch);
return;
}
if (!IS_SET(ch->pcdata->rel_powers, REL_HDESIRE))
{
send_to_char("You don't have that religion power.\n\r", ch);
return;
}
if (!IS_SET(ch->itemaffect, ITEMA_HOLYSYMBOL))
{
send_to_char("Where is your holy symbol?\n\r", ch);
return;
}
if (!TIME_UP(ch, TIMER_HDESIRE))
{
send_to_char
("Sorry, you can only use this power once every 2 hours.\n\r",
ch);
return;
}
one_argument(argument, arg);
if (arg[0] == '\0')
{
send_to_char
("Whom do you wish to read the hearts desires of?\n\r",
ch);
return;
}
if (ch->mana < cost)
{
send_to_char("You don't have enough mana.\n\r", ch);
return;
}
if ((victim = get_char_world(ch, arg)) == NULL)
{
send_to_char("They are not here.\n\r", ch);
return;
}
if (IS_NPC(victim) || victim->level > 6)
{
send_to_char("Mobiles have no desires.\n\r", ch);
return;
}
if (IS_AFFECTED2(victim, AFF2_FARMOR))
{
act("The spell fizzles as it strikes some holy barrier.", ch,
NULL, NULL, TO_CHAR);
act("The armor of faith shimmers for a second, repelling some attack.", victim, NULL, NULL, TO_CHAR);
SET_TIMER(ch, TIMER_HDESIRE, 2);
ch->mana -= cost;
return;
}
xprintf(buf, "%s score", arg);
do_asperson(ch, buf);
if (victim->pcdata->religion != 0)
{
xprintf(buf, "%s relpowers", arg);
do_asperson(ch, buf);
}
ch->mana -= cost;
send_to_char("\n\rYou read their hearts desires.\n\r", ch);
SET_TIMER(ch, TIMER_HDESIRE, 2);
WAIT_STATE(ch, 12);
return;
}
void do_dscry(CHAR_DATA * ch, char *argument)
{
CHAR_DATA *victim;
ROOM_INDEX_DATA *chroom;
ROOM_INDEX_DATA *victimroom;
char arg[MAX_INPUT_LENGTH];
char buf[MAX_STRING_LENGTH];
int cost = 15000;
if (IS_NPC(ch))
return;
if (ch->pcdata->religion == 0)
{
send_to_char("You are not worshipping any deity.\n\r", ch);
return;
}
if (!IS_SET(ch->pcdata->rel_powers, REL_DSCRY))
{
send_to_char("You don't have that religion power.\n\r", ch);
return;
}
if (!IS_SET(ch->itemaffect, ITEMA_HOLYSYMBOL))
{
send_to_char("Where is your holy symbol?\n\r", ch);
return;
}
if (ch->mana < cost)
{
send_to_char("You don't have enough mana.\n\r", ch);
return;
}
one_argument(argument, arg);
if ((victim = get_char_world(ch, arg)) == NULL)
{
send_to_char("They aren't here.\n\r", ch);
return;
}
if (!IS_NPC(victim) && victim->level > 6)
{
send_to_char("Hardly.\n\r", ch);
return;
}
if (IS_AFFECTED2(victim, AFF2_FARMOR))
{
act("The scry attempt fizzles as it strikes some holy barrier.", ch, NULL, NULL, TO_CHAR);
act("The armor of faith shimmers for a second, repelling some attack.", victim, NULL, NULL, TO_CHAR);
ch->mana -= cost;
return;
}
chroom = ch->in_room;
victimroom = victim->in_room;
char_from_room(ch);
char_to_room(ch, victimroom);
if (IS_AFFECTED(ch, AFF_SHADOWPLANE)
&& (!IS_AFFECTED(victim, AFF_SHADOWPLANE)))
{
REMOVE_BIT(ch->affected_by, AFF_SHADOWPLANE);
do_look(ch, "scry");
SET_BIT(ch->affected_by, AFF_SHADOWPLANE);
}
else if (!IS_AFFECTED(ch, AFF_SHADOWPLANE)
&& (IS_AFFECTED(victim, AFF_SHADOWPLANE)))
{
SET_BIT(ch->affected_by, AFF_SHADOWPLANE);
do_look(ch, "scry");
REMOVE_BIT(ch->affected_by, AFF_SHADOWPLANE);
}
else
do_look(ch, "scry");
char_from_room(ch);
char_to_room(ch, chroom);
xprintf(buf,
"\n\r%s is in %s health, and is currenlty located in '%s'\n\r",
victim->name, get_player_health(victim),
victim->in_room->area->name);
send_to_char(buf, ch);
ch->mana -= cost;
return;
}
void do_pestilence(CHAR_DATA * ch, char *argument)
{
AREA_AFFECT af;
AREA_DATA *pArea;
int cost = 15000;
if (IS_NPC(ch))
return;
if (ch->pcdata->religion == 0)
{
send_to_char("You are not worshipping any deity.\n\r", ch);
return;
}
if (!IS_SET(ch->pcdata->rel_powers, REL_PESTILENCE))
{
send_to_char("You don't have that religion power.\n\r", ch);
return;
}
if (!IS_SET(ch->itemaffect, ITEMA_HOLYSYMBOL))
{
send_to_char("Where is your holy symbol?\n\r", ch);
return;
}
if ((pArea = ch->in_room->area) == NULL)
{
send_to_char("You cannot cast this spell in this place.\n\r",
ch);
return;
}
if (has_area_affect(pArea, AREA_AFF_PESTILENCE, 0))
{
send_to_char
("This unholy enchantment has already been invoked here.\n\r",
ch);
return;
}
if (!TIME_UP(ch, TIMER_PESTILENCE))
{
send_to_char
("Sorry, you can only use this power once every 4 hours.\n\r",
ch);
return;
}
if (ch->mana < cost)
{
send_to_char("You don't have enough mana.\n\r", ch);
return;
}
if (has_area_affect(pArea, AREA_AFF_CHAOS, 0))
{
if (number_range(1, 4) != 2)
{
int dam;
dam = number_range(10, 20);
dam *= ch->pcdata->current_faith; // wicked :)
ch->hit -= dam;
if (ch->hit < 1)
ch->hit = 1;
ch->mana -= cost;
send_to_char
("Your enchantment backfires, the spell is spoiled.\n\r",
ch);
WAIT_STATE(ch, 24);
return;
}
}
af.type = AREA_AFF_PESTILENCE;
af.duration = ch->pcdata->faith / 10;
af.level = ch->pcdata->faith;
af.religion = ch->pcdata->religion;
affect_to_area(pArea, &af);
act("$n invokes the name of $s god, as $e lays the Pestilence enchantment.", ch, NULL, NULL, TO_ROOM);
send_to_char("You lay the Pestilence enchantment on this area.\n\r",
ch);
ch->mana -= cost;
SET_TIMER(ch, TIMER_PESTILENCE, 4);
WAIT_STATE(ch, 36);
return;
}
void do_banishment(CHAR_DATA * ch, char *argument)
{
AREA_AFFECT *paf;
AREA_AFFECT *paf_next;
AREA_DATA *pArea;
CHAR_DATA *victim;
char arg[MAX_INPUT_LENGTH];
bool found = FALSE;
int cost = 15000;
if (IS_NPC(ch))
return;
one_argument(argument, arg);
if (ch->pcdata->religion == 0)
{
send_to_char("You are not worshipping any deity.\n\r", ch);
return;
}
if (!IS_SET(ch->pcdata->rel_powers, REL_BANISHMENT))
{
send_to_char("You don't have that religion power.\n\r", ch);
return;
}
if (!IS_SET(ch->itemaffect, ITEMA_HOLYSYMBOL))
{
send_to_char("Where is your holy symbol?\n\r", ch);
return;
}
if (ch->mana < cost)
{
send_to_char("You don't have enough mana.\n\r", ch);
return;
}
if ((victim = get_char_world(ch, arg)) == NULL)
{
send_to_char("Banish the area in which whom is standing?\n\r",
ch);
return;
}
if ((pArea = victim->in_room->area) == NULL)
{
send_to_char("You cannot cast this spell in this place.\n\r",
ch);
return;
}
for (paf = pArea->affects; paf; paf = paf_next)
{
paf_next = paf->next;
found = TRUE;
if ((ch->pcdata->faith > paf->level && number_percent() > 25)
|| number_percent() > 75)
{
send_to_char
("Found and destroyed a magical enchantment.\n\r",
ch);
area_affect_remove(pArea, paf);
}
else
send_to_char
("Found, but failed to destroy magical enchantment.\n\r",
ch);
}
if (!found)
{
send_to_char("No enchantments currently active.\n\r", ch);
return;
}
WAIT_STATE(ch, 12);
ch->mana -= cost;
return;
}
void do_starsight(CHAR_DATA * ch, char *argument)
{
int cost = 15000;
int fps = 1;
if (IS_NPC(ch))
return;
if (ch->pcdata->religion == 0)
{
send_to_char("You are not worshipping any deity.\n\r", ch);
return;
}
if (!IS_SET(ch->pcdata->rel_powers, REL_STARSIGHT))
{
send_to_char("You don't have that religion power.\n\r", ch);
return;
}
if (!IS_SET(ch->itemaffect, ITEMA_HOLYSYMBOL))
{
send_to_char("Where is your holy symbol?\n\r", ch);
return;
}
if (IS_SET(ch->itemaffect, ITEMA_VISION))
{
send_to_char("You already have this divine sight.\n\r", ch);
return;
}
if (ch->mana < cost)
{
send_to_char
("You don't have enough mana to cast this spell.\n\r",
ch);
return;
}
if (ch->pcdata->current_faith < fps)
{
send_to_char
("You don't have enough fps to power the spell.\n\r",
ch);
return;
}
send_to_char("Your eyes flicker with divine vision.\n\r", ch);
SET_BIT(ch->itemaffect, ITEMA_VISION);
ch->pcdata->current_faith -= fps;
ch->mana -= cost;
return;
}
void do_gaia(CHAR_DATA * ch, char *argument)
{
AREA_AFFECT af;
AREA_DATA *pArea;
int cost = 10000;
if (IS_NPC(ch))
return;
if (ch->pcdata->religion == 0)
{
send_to_char("You are not worshipping any deity.\n\r", ch);
return;
}
if (!IS_SET(ch->pcdata->rel_powers, REL_GAIA))
{
send_to_char("You don't have that religion power.\n\r", ch);
return;
}
if (!IS_SET(ch->itemaffect, ITEMA_HOLYSYMBOL))
{
send_to_char("Where is your holy symbol?\n\r", ch);
return;
}
if ((pArea = ch->in_room->area) == NULL)
{
send_to_char("You cannot cast this spell in this place.\n\r",
ch);
return;
}
if (has_area_affect(pArea, AREA_AFF_GAIA, 0))
{
send_to_char
("This unholy enchantment has already been invoked here.\n\r",
ch);
return;
}
if (ch->mana < cost)
{
send_to_char("You don't have enough mana.\n\r", ch);
return;
}
if (has_area_affect(pArea, AREA_AFF_CHAOS, 0))
{
if (number_range(1, 4) != 2)
{
int dam;
dam = number_range(10, 20);
dam *= ch->pcdata->current_faith; // wicked :)
ch->hit -= dam;
if (ch->hit < 1)
ch->hit = 1;
ch->mana -= cost;
send_to_char
("Your enchantment backfires, the spell is spoiled.\n\r",
ch);
WAIT_STATE(ch, 24);
return;
}
}
af.type = AREA_AFF_GAIA;
af.duration = ch->pcdata->faith / 10;
af.level = ch->pcdata->faith;
af.religion = ch->pcdata->religion;
affect_to_area(pArea, &af);
act("$n invokes the name of $s god, as $e lays the Gaia's Blessing enchantment.", ch, NULL, NULL, TO_ROOM);
send_to_char
("You lay the Gaia's Blessing enchantment on this area.\n\r",
ch);
ch->mana -= cost;
WAIT_STATE(ch, 36);
return;
}
void do_dbattle(CHAR_DATA * ch, char *argument)
{
ROOM_INDEX_DATA *location;
CHAR_DATA *victim;
char buf[MAX_STRING_LENGTH];
int cost = 15000;
if (IS_NPC(ch))
return;
if (ch->pcdata->religion == 0)
{
send_to_char("You are not worshipping any deity.\n\r", ch);
return;
}
if (!IS_SET(ch->pcdata->rel_powers, REL_DBATTLE))
{
send_to_char("You don't have that religion power.\n\r", ch);
return;
}
if (!IS_SET(ch->itemaffect, ITEMA_HOLYSYMBOL))
{
send_to_char("Where is your holy symbol?\n\r", ch);
return;
}
if (ch->mana < cost)
{
send_to_char("You don't have enough mana.\n\r", ch);
return;
}
if (ch->in_room->vnum >= ROOM_VNUM_REL_HALL1 &&
ch->in_room->vnum <= ROOM_VNUM_REL_HALL3)
{
send_to_char("Say, what?!?\n\r", ch);
return;
}
if (in_fortress(ch))
{
send_to_char("Hehe, not in the fortress silly.\n\r", ch);
return;
}
if (ch->in_room != NULL)
{
if (IS_SET(ch->in_room->room_flags, ROOM_ARENA))
{
send_to_char("Your are in the arena.\n\r", ch);
return;
}
}
if ((victim = ch->fighting) == NULL)
{
send_to_char("You are not fighting anyone.\n\r", ch);
return;
}
if (IS_NPC(victim))
{
send_to_char("Not on mobiles.\n\r", ch);
return;
}
if (victim->pcdata->religion == 0)
{
send_to_char
("They have no faith, and are hardly worthy of your time.\n\r",
ch);
return;
}
if (IS_AFFECTED2(victim, AFF2_FARMOR))
{
act("The spell fizzles as it strikes $N's armor of faith.",
ch, NULL, victim, TO_CHAR);
act("Your armor of faith shimmers as it repels an attack.",
victim, NULL, NULL, TO_CHAR);
ch->mana -= cost;
return;
}
xprintf(buf, "I challenge you, %s, to a holy duel, on your faith.",
victim->name);
do_say(ch, buf);
if ((location = get_room_index(ROOM_VNUM_REL_HALL1)) != NULL
&& location->people == NULL)
{
char_from_room(victim);
char_from_room(ch);
char_to_room(victim, location);
char_to_room(ch, location);
}
else if ((location = get_room_index(ROOM_VNUM_REL_HALL2)) != NULL
&& location->people == NULL)
{
char_from_room(victim);
char_from_room(ch);
char_to_room(victim, location);
char_to_room(ch, location);
}
else if ((location = get_room_index(ROOM_VNUM_REL_HALL3)) != NULL
&& location->people == NULL)
{
char_from_room(victim);
char_from_room(ch);
char_to_room(victim, location);
char_to_room(ch, location);
}
else
{
send_to_char("Sorry, the halls are currently being used.\n\r",
ch);
return;
}
ch->mana -= cost;
WAIT_STATE(ch, 6);
return;
}
void do_madness(CHAR_DATA * ch, char *argument)
{
CHAR_DATA *gch;
int cost = 15000;
char buf[MAX_STRING_LENGTH];
bool found = FALSE;
if (IS_NPC(ch))
return;
if (ch->pcdata->religion == 0)
{
send_to_char("You are not worshipping any deity.\n\r", ch);
return;
}
if (!IS_SET(ch->pcdata->rel_powers, REL_MADNESS))
{
send_to_char("You don't have that religion power.\n\r", ch);
return;
}
if (!IS_SET(ch->itemaffect, ITEMA_HOLYSYMBOL))
{
send_to_char("Where is your holy symbol?\n\r", ch);
return;
}
if (!TIME_UP(ch, TIMER_MADNESS))
{
send_to_char
("Sorry, you can only use this power once every 2 hours.\n\r",
ch);
return;
}
if (ch->mana < cost)
{
send_to_char("You don't have enough mana.\n\r", ch);
return;
}
act("$n twists reality and challenges your sanity with horrid images.", ch, NULL, NULL, TO_ROOM);
for (gch = ch->in_room->people; gch; gch = gch->next)
{
if (IS_NPC(gch))
continue;
if (!gch->fighting || gch->fighting != ch)
continue;
if ((gch->pcdata->faith > ch->pcdata->faith)
&& number_range(1, 3) == 2)
continue;
if (IS_AFFECTED2(gch, AFF2_FARMOR))
{
act("$n's armor of faith shimmers for a second.", gch,
NULL, NULL, TO_ROOM);
act("Your armor of faith protects you from harm.",
gch, NULL, NULL, TO_CHAR);
continue;
}
found = TRUE;
xprintf(buf, "%s is struck by madness!\n\r", gch->name);
send_to_char(buf, ch);
send_to_char("You are struck by madness.\n\r", gch);
SET_BIT(gch->pcdata->jflags, JFLAG_MADNESS);
}
if (!found)
send_to_char("Noone seems to be affected.\n\r", ch);
ch->mana -= cost;
WAIT_STATE(ch, 12);
SET_TIMER(ch, TIMER_MADNESS, 2);
return;
}
void do_callwild(CHAR_DATA * ch, char *argument)
{
CHAR_DATA *victim;
AFFECT_DATA af;
char buf[MAX_STRING_LENGTH];
int cost = 15000;
if (IS_NPC(ch))
return;
if (ch->pcdata->religion == 0)
{
send_to_char("You are not worshipping any deity.\n\r", ch);
return;
}
if (!IS_SET(ch->pcdata->rel_powers, REL_CALLWILD))
{
send_to_char("You don't have that religion power.\n\r", ch);
return;
}
if (!IS_SET(ch->itemaffect, ITEMA_HOLYSYMBOL))
{
send_to_char("Where is your holy symbol?\n\r", ch);
return;
}
if (!TIME_UP(ch, TIMER_CALLWILD))
{
send_to_char
("You can only call on the wild every 2 mud hours.\n\r",
ch);
return;
}
if (ch->mana < cost)
{
send_to_char("You don't have enough mana.\n\r", ch);
return;
}
if ((victim = ch->fighting) == NULL)
{
send_to_char("You are not fighting anyone.\n\r", ch);
return;
}
if (IS_NPC(victim))
{
send_to_char
("They are but a creature of the wild themselfs.\n\r",
ch);
return;
}
if (IS_AFFECTED2(victim, AFF2_FARMOR))
{
act("The spell fizzles as it strikes some holy barrier.", ch,
NULL, NULL, TO_CHAR);
act("The armor of faith shimmers for a second, repelling some attack.", victim, NULL, NULL, TO_CHAR);
SET_TIMER(ch, TIMER_CALLWILD, 2);
ch->mana -= cost;
return;
}
if (!IS_SET(victim->affected_by2, AFF2_THORNS))
{
SET_BIT(victim->affected_by2, AFF2_THORNS);
send_to_char
("You are rooted to the ground by vines and thorny brambles.\n\r",
victim);
xprintf(buf,
"The will answers your prayer and roots %s to the ground.\n\r",
victim->name);
send_to_char(buf, ch);
}
one_hit(ch, victim, gsn_thorns, 1);
one_hit(ch, victim, gsn_thorns, 1);
af.type = skill_lookup("reserved");
af.duration = 20;
af.location = APPLY_DAMROLL;
af.modifier = number_range(-100, -200);
af.bitvector = 0;
affect_to_char(victim, &af);
af.type = skill_lookup("reserved");
af.duration = 20;
af.location = APPLY_HITROLL;
af.modifier = number_range(-100, -200);
af.bitvector = 0;
affect_to_char(victim, &af);
send_to_char("You are cursed by the forces of nature.\n\r", victim);
send_to_char("The forces of nature curse the heathen.\n\r", ch);
SET_TIMER(ch, TIMER_CALLWILD, 2);
ch->mana -= cost;
return;
}
void do_gfury(CHAR_DATA * ch, char *argument)
{
CHAR_DATA *victim;
int cost = 15000;
int count = 1;
if (IS_NPC(ch))
return;
if (ch->pcdata->religion == 0)
{
send_to_char("You are not worshipping any deity.\n\r", ch);
return;
}
if (!IS_SET(ch->pcdata->rel_powers, REL_GFURY))
{
send_to_char("You don't have that religion power.\n\r", ch);
return;
}
if (!IS_SET(ch->itemaffect, ITEMA_HOLYSYMBOL))
{
send_to_char("Where is your holy symbol?\n\r", ch);
return;
}
if (ch->mana < cost)
{
send_to_char("You don't have enough mana.\n\r", ch);
return;
}
if (!TIME_UP(ch, TIMER_GFURY))
{
send_to_char
("Sorry, you can only use this power once every 2 hours.\n\r",
ch);
return;
}
if ((victim = ch->fighting) == NULL)
{
send_to_char("You are not fighting anyone.\n\r", ch);
return;
}
if (IS_NPC(victim))
{
send_to_char("They are hardly worthy of your wrath.\n\r", ch);
return;
}
if (IS_AFFECTED2(victim, AFF2_FARMOR))
{
act("The spell fizzles as it strikes some holy barrier.", ch,
NULL, NULL, TO_CHAR);
act("The armor of faith shimmers for a second, repelling some attack.", victim, NULL, NULL, TO_CHAR);
ch->mana -= cost;
SET_TIMER(ch, TIMER_GFURY, 2);
return;
}
do_say(ch,
"Time to admit your sins faithless. The time of reckoning is here!");
count += ch->pcdata->faith / 15;
count -= victim->pcdata->faith / 15;
if (rel_oppose(ch, victim))
count *= 2;
if (count < 2)
count = 2;
if (count > 7)
count = 7;
while (--count >= 0)
one_hit(ch, victim, gsn_faith, 1);
ch->mana -= cost;
SET_TIMER(ch, TIMER_GFURY, 2);
return;
}
void do_subvert(CHAR_DATA * ch, char *argument)
{
AREA_AFFECT *paf;
AREA_DATA *pArea;
bool found = FALSE;
int cost = 20000;
int fps = 1;
if (IS_NPC(ch))
return;
if (ch->pcdata->religion == 0)
{
send_to_char("You are not worshipping any deity.\n\r", ch);
return;
}
if (!IS_SET(ch->pcdata->rel_powers, REL_SUBVERT))
{
send_to_char("You don't have that religion power.\n\r", ch);
return;
}
if (!IS_SET(ch->itemaffect, ITEMA_HOLYSYMBOL))
{
send_to_char("Where is your holy symbol?\n\r", ch);
return;
}
if ((pArea = ch->in_room->area) == NULL)
{
send_to_char("You cannot cast this spell in this place.\n\r",
ch);
return;
}
if (ch->mana < cost)
{
send_to_char("You don't have enough mana.\n\r", ch);
return;
}
if (ch->pcdata->religion != RELIGION_LOA)
fps *= 2;
if (ch->pcdata->current_faith < fps)
{
send_to_char
("You do not have enough faith points to complete the subversion.\n\r",
ch);
return;
}
act("$n praises the almighty loa.", ch, NULL, NULL, TO_ROOM);
act("You praise the almight loa.", ch, NULL, NULL, TO_CHAR);
for (paf = pArea->affects; paf; paf = paf->next)
{
if (paf->religion == ch->pcdata->religion)
continue;
found = TRUE;
if ((ch->pcdata->faith > paf->level && number_percent() > 25)
|| number_percent() > 75)
{
paf->religion = ch->pcdata->religion;
send_to_char("You subvert an area affect.\n\r", ch);
}
else
send_to_char
("Failed the subversion of an area affect.\n\r",
ch);
}
if (!found)
{
send_to_char("No affects found in this area.\n\r", ch);
return;
}
ch->pcdata->current_faith -= fps;
ch->mana -= cost;
return;
}
void do_rebirth(CHAR_DATA * ch, char *argument)
{
int cost = 20000;
int fps = 1;
AFFECT2_DATA af;
if (IS_NPC(ch))
return;
if (ch->pcdata->religion == 0)
{
send_to_char("You are not worshipping any deity.\n\r", ch);
return;
}
if (!IS_SET(ch->pcdata->rel_powers, REL_REBIRTH))
{
send_to_char("You don't have that religion power.\n\r", ch);
return;
}
if (!IS_SET(ch->itemaffect, ITEMA_HOLYSYMBOL))
{
send_to_char("Where is your holy symbol?\n\r", ch);
return;
}
if (ch->mana < cost)
{
send_to_char("You don't have enough mana.\n\r", ch);
return;
}
if (ch->pcdata->religion != RELIGION_WILD)
fps *= 2;
if (ch->pcdata->current_faith < fps)
{
send_to_char
("You do not have enough faith points to be reborn.\n\r",
ch);
return;
}
if (has_timer(ch))
return;
ch->pcdata->current_faith -= fps;
ch->loc_hp[0] = 0;
ch->loc_hp[1] = 0;
ch->loc_hp[2] = 0;
ch->loc_hp[3] = 0;
ch->loc_hp[4] = 0;
ch->loc_hp[5] = 0;
ch->loc_hp[6] = 0;
ch->mana = ch->max_mana;
ch->move = ch->max_move;
ch->hit = ch->max_hit;
af.type = skill_lookup("bless");
af.duration = 20;
af.location = APPLY_HITROLL;
af.modifier = number_range(100, 150);
af.bitvector = AFF2_DARMOR;
affect2_to_char(ch, &af);
af.location = APPLY_DAMROLL;
af.modifier = number_range(100, 150);
affect2_to_char(ch, &af);
SET_BIT(ch->itemaffect, ITEMA_VISION);
SET_BIT(ch->newbits, NEW_VISION);
act("$n calls to the mother of nature, and $s body is instantly healed.", ch, NULL, NULL, TO_ROOM);
send_to_char("Your eyes flicker, and everything is made clear.\n\r",
ch);
send_to_char
("Your body regenerates all wounds, and you feel as fresh as ever.\n\r",
ch);
return;
}
void do_landscape(CHAR_DATA * ch, char *argument)
{
AREA_AFFECT af;
AREA_DATA *pArea;
int cost = 20000;
int fps = 1;
if (IS_NPC(ch))
return;
if (ch->pcdata->religion == 0)
{
send_to_char("You are not worshipping any deity.\n\r", ch);
return;
}
if (!IS_SET(ch->pcdata->rel_powers, REL_CHAOS))
{
send_to_char("You don't have that religion power.\n\r", ch);
return;
}
if (!IS_SET(ch->itemaffect, ITEMA_HOLYSYMBOL))
{
send_to_char("Where is your holy symbol?\n\r", ch);
return;
}
if (ch->pcdata->religion != RELIGION_GAHR)
fps *= 2;
if (ch->pcdata->current_faith < fps)
{
send_to_char
("You do not have enough faith points to invoke the chaotic landscape.\n\r",
ch);
return;
}
if ((pArea = ch->in_room->area) == NULL)
{
send_to_char("You cannot cast this spell in this place.\n\r",
ch);
return;
}
if (has_area_affect(pArea, AREA_AFF_CHAOS, 0))
{
send_to_char
("This unholy enchantment has already been invoked here.\n\r",
ch);
return;
}
if (ch->mana < cost)
{
send_to_char("You don't have enough mana.\n\r", ch);
return;
}
af.type = AREA_AFF_CHAOS;
af.duration = ch->pcdata->faith / 10;
af.level = ch->pcdata->faith;
af.religion = ch->pcdata->religion;
affect_to_area(pArea, &af);
act("$n invokes the name of $s god, as $e lays the Chaotic Landscape enchantment.", ch, NULL, NULL, TO_ROOM);
send_to_char
("You lay the Chaotic Landscape enchantment on this area.\n\r",
ch);
ch->mana -= cost;
ch->pcdata->current_faith -= fps;
WAIT_STATE(ch, 12);
return;
}
void do_supernova(CHAR_DATA * ch, char *argument)
{
int fps = 1, i, count, cost = 20000;
CHAR_DATA *victim;
OBJ_DATA *wield1;
OBJ_DATA *wield2;
if (IS_NPC(ch))
return;
if (ch->pcdata->religion == 0)
{
send_to_char("You are not worshipping any deity.\n\r", ch);
return;
}
if (!IS_SET(ch->pcdata->rel_powers, REL_NOVA))
{
send_to_char("You don't have that religion power.\n\r", ch);
return;
}
if (!IS_SET(ch->itemaffect, ITEMA_HOLYSYMBOL))
{
send_to_char("Where is your holy symbol?\n\r", ch);
return;
}
if (ch->mana < cost)
{
send_to_char("You don't have enough mana.\n\r", ch);
return;
}
if (ch->pcdata->religion != RELIGION_STARS)
fps *= 2;
if (ch->pcdata->current_faith < fps)
{
send_to_char
("You do not have enough faith points to create a supernova.\n\r",
ch);
return;
}
if (!TIME_UP(ch, TIMER_SUPERNOVA))
{
send_to_char
("Sorry, you can only use this power once every 4 hours.\n\r",
ch);
return;
}
if ((victim = ch->fighting) == NULL)
{
send_to_char("You are not fighting anyone.\n\r", ch);
return;
}
if (IS_NPC(victim))
{
send_to_char
("They are hardly worthy targets of a supernova.\n\r",
ch);
return;
}
if (IS_AFFECTED2(victim, AFF2_FARMOR))
{
act("The spell fizzles as it strikes some holy barrier.", ch,
NULL, NULL, TO_CHAR);
act("The armor of faith shimmers for a second, repelling some attack.", victim, NULL, NULL, TO_CHAR);
ch->mana -= cost;
SET_TIMER(ch, TIMER_SUPERNOVA, 4);
return;
}
count = URANGE(4, ch->max_hit / 10000, 8);
for (i = 0; i < count; i++)
one_hit(ch, victim, gsn_nova, 1);
if ((wield1 = get_eq_char(victim, WEAR_WIELD)) != NULL
&& number_range(1, 3) != 2)
take_item(victim, wield1);
if ((wield2 = get_eq_char(victim, WEAR_HOLD)) != NULL
&& number_range(1, 3) != 2)
take_item(victim, wield2);
ch->mana -= cost;
ch->pcdata->current_faith -= fps;
SET_TIMER(ch, TIMER_SUPERNOVA, 4);
return;
}
void do_farmor(CHAR_DATA * ch, char *argument)
{
int sn, cost = 20000, fps = 1;
if (IS_NPC(ch))
return;
if (ch->pcdata->religion == 0)
{
send_to_char("You are not worshipping any deity.\n\r", ch);
return;
}
if (!IS_SET(ch->pcdata->rel_powers, REL_FARMOR))
{
send_to_char("You don't have that religion power.\n\r", ch);
return;
}
if (!IS_SET(ch->itemaffect, ITEMA_HOLYSYMBOL))
{
send_to_char("Where is your holy symbol?\n\r", ch);
return;
}
if (ch->mana < cost)
{
send_to_char("You don't have enough mana.\n\r", ch);
return;
}
if (ch->pcdata->religion != RELIGION_ONE)
fps *= 2;
if (ch->pcdata->current_faith < fps)
{
send_to_char
("You do not have enough faith points to invoke this warding.\n\r",
ch);
return;
}
sn = skill_lookup("faith armor");
if (sn > 0)
(*skill_table[sn].spell_fun) (sn, 50, ch, ch);
WAIT_STATE(ch, 6);
ch->mana -= cost;
ch->pcdata->current_faith -= fps;
return;
}