/***************************************************************************
* ANATOLIA 2.1 is copyright 1996-1997 Serdar BULUT *
* ANATOLIA has been brought to you by ANATOLIA consortium *
* Serdar BULUT {Chronos} bulut@rorqual.cc.metu.edu.tr *
* Ibrahim Canpunar {Mandrake} canpunar@rorqual.cc.metu.edu.tr *
* Murat BICER {KIO} mbicer@rorqual.cc.metu.edu.tr *
* D.Baris ACAR {Powerman} dbacar@rorqual.cc.metu.edu.tr *
* By using this code, you have agreed to follow the terms of the *
* ANATOLIA license, in the file Anatolia/anatolia.licence *
***************************************************************************/
/***************************************************************************
* 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. *
* *
* 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. *
***************************************************************************/
/***************************************************************************
* ROM 2.4 is copyright 1993-1995 Russ Taylor *
* ROM has been brought to you by the ROM consortium *
* Russ Taylor (rtaylor@pacinfo.com) *
* Gabrielle Taylor (gtaylor@pacinfo.com) *
* Brian Moore (rom@rom.efn.org) *
* By using this code, you have agreed to follow the terms of the *
* ROM license, in the file Rom24/doc/rom.license *
***************************************************************************/
#if defined(macintosh)
#include <types.h>
#include <time.h>
#else
#include <sys/types.h>
#endif
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "merc.h"
#include "magic.h"
#include "interp.h"
void one_hit(CHAR_DATA *ch, CHAR_DATA *victim, int dt, bool second);
bool cabal_area_check args( (CHAR_DATA *ch) );
DECLARE_OPROG_FUN_WEAR( wear_prog_excalibur );
DECLARE_OPROG_FUN_REMOVE( remove_prog_excalibur );
DECLARE_OPROG_FUN_DEATH( death_prog_excalibur );
DECLARE_OPROG_FUN_SPEECH( speech_prog_excalibur );
DECLARE_OPROG_FUN_SAC( sac_prog_excalibur );
DECLARE_OPROG_FUN_SAC( sac_prog_cabal_item );
DECLARE_OPROG_FUN_GET( get_prog_cabal_item );
DECLARE_OPROG_FUN_FIGHT( fight_prog_sub_weapon );
DECLARE_OPROG_FUN_SPEECH( speech_prog_kassandra );
DECLARE_OPROG_FUN_FIGHT( fight_prog_chaos_blade );
DECLARE_OPROG_FUN_DEATH( death_prog_chaos_blade );
DECLARE_OPROG_FUN_FIGHT( fight_prog_tattoo_apollon );
DECLARE_OPROG_FUN_FIGHT( fight_prog_tattoo_zeus );
DECLARE_OPROG_FUN_FIGHT( fight_prog_tattoo_siebele );
DECLARE_OPROG_FUN_FIGHT( fight_prog_tattoo_ahrumazda );
DECLARE_OPROG_FUN_FIGHT( fight_prog_tattoo_hephaestus );
DECLARE_OPROG_FUN_FIGHT( fight_prog_tattoo_ehrumen );
DECLARE_OPROG_FUN_FIGHT( fight_prog_tattoo_venus );
DECLARE_OPROG_FUN_FIGHT( fight_prog_tattoo_deimos );
DECLARE_OPROG_FUN_FIGHT( fight_prog_tattoo_odin );
DECLARE_OPROG_FUN_FIGHT( fight_prog_tattoo_phobos );
DECLARE_OPROG_FUN_FIGHT( fight_prog_tattoo_mars );
DECLARE_OPROG_FUN_FIGHT( fight_prog_tattoo_athena );
DECLARE_OPROG_FUN_FIGHT(fight_prog_tattoo_prometheus);
DECLARE_OPROG_FUN_FIGHT(fight_prog_tattoo_goktengri);
DECLARE_OPROG_FUN_FIGHT( fight_prog_tattoo_hera);
DECLARE_OPROG_FUN_FIGHT( fight_prog_tattoo_ares);
DECLARE_OPROG_FUN_FIGHT( fight_prog_tattoo_eros);
DECLARE_OPROG_FUN_FIGHT( fight_prog_golden_weapon );
DECLARE_OPROG_FUN_DEATH( death_prog_golden_weapon );
DECLARE_OPROG_FUN_GET( get_prog_heart );
DECLARE_OPROG_FUN_WEAR( wear_prog_bracer );
DECLARE_OPROG_FUN_REMOVE( remove_prog_bracer );
DECLARE_OPROG_FUN_WEAR(wear_prog_ranger_staff );
DECLARE_OPROG_FUN_FIGHT( fight_prog_ranger_staff );
DECLARE_OPROG_FUN_DEATH( death_prog_ranger_staff );
DECLARE_OPROG_FUN_WEAR(wear_prog_coconut );
DECLARE_OPROG_FUN_ENTRY(entry_prog_coconut );
DECLARE_OPROG_FUN_GREET(greet_prog_coconut );
DECLARE_OPROG_FUN_GET(get_prog_coconut );
DECLARE_OPROG_FUN_REMOVE(remove_prog_coconut );
DECLARE_OPROG_FUN_FIGHT(fight_prog_firegauntlets);
DECLARE_OPROG_FUN_WEAR(wear_prog_firegauntlets );
DECLARE_OPROG_FUN_REMOVE(remove_prog_firegauntlets);
/* ibrahim armbands */
DECLARE_OPROG_FUN_FIGHT(fight_prog_armbands );
DECLARE_OPROG_FUN_WEAR(wear_prog_armbands );
DECLARE_OPROG_FUN_REMOVE(remove_prog_armbands );
DECLARE_OPROG_FUN_FIGHT(fight_prog_demonfireshield);
DECLARE_OPROG_FUN_WEAR(wear_prog_demonfireshield);
DECLARE_OPROG_FUN_REMOVE(remove_prog_demonfireshield);
DECLARE_OPROG_FUN_FIGHT(fight_prog_vorbalblade );
DECLARE_OPROG_FUN_GET(get_prog_spec_weapon );
DECLARE_OPROG_FUN_GET(get_prog_quest_obj );
DECLARE_OPROG_FUN_FIGHT(fight_prog_shockwave );
DECLARE_OPROG_FUN_FIGHT(fight_prog_snake );
/* new ones by chronos */
DECLARE_OPROG_FUN_WEAR( wear_prog_wind_boots );
DECLARE_OPROG_FUN_REMOVE( remove_prog_wind_boots);
DECLARE_OPROG_FUN_WEAR( wear_prog_arm_hercules );
DECLARE_OPROG_FUN_REMOVE( remove_prog_arm_hercules );
DECLARE_OPROG_FUN_WEAR( wear_prog_girdle_giant );
DECLARE_OPROG_FUN_REMOVE( remove_prog_girdle_giant );
DECLARE_OPROG_FUN_WEAR( wear_prog_breastplate_strength );
DECLARE_OPROG_FUN_REMOVE( remove_prog_breastplate_strength );
DECLARE_OPROG_FUN_WEAR( wear_prog_boots_flying );
DECLARE_OPROG_FUN_REMOVE( remove_prog_boots_flying );
DECLARE_OPROG_FUN_FIGHT( fight_prog_rose_shield );
DECLARE_OPROG_FUN_FIGHT( fight_prog_lion_claw );
DECLARE_OPROG_FUN_SPEECH( speech_prog_ring_ra );
DECLARE_OPROG_FUN_WEAR( wear_prog_eyed_sword );
DECLARE_OPROG_FUN_WEAR( wear_prog_katana_sword );
DECLARE_OPROG_FUN_WEAR( wear_prog_snake );
DECLARE_OPROG_FUN_REMOVE( remove_prog_snake );
DECLARE_OPROG_FUN_GET( get_prog_snake );
DECLARE_OPROG_FUN_WEAR( wear_prog_fire_shield );
DECLARE_OPROG_FUN_REMOVE( remove_prog_fire_shield );
DECLARE_OPROG_FUN_WEAR( wear_prog_quest_weapon );
DECLARE_OPROG_FUN_GET(get_prog_quest_reward );
DECLARE_OPROG_FUN_GET(get_prog_quest_hreward );
DECLARE_OPROG_FUN_FIGHT(fight_prog_ancient_gloves);
DECLARE_OPROG_FUN_WEAR(wear_prog_ancient_gloves );
DECLARE_OPROG_FUN_REMOVE(remove_prog_ancient_gloves);
DECLARE_OPROG_FUN_FIGHT(fight_prog_ancient_shield);
DECLARE_OPROG_FUN_WEAR(wear_prog_ancient_shield );
DECLARE_OPROG_FUN_REMOVE(remove_prog_ancient_shield);
DECLARE_OPROG_FUN_WEAR( wear_prog_neckguard );
DECLARE_OPROG_FUN_REMOVE( remove_prog_neckguard );
DECLARE_OPROG_FUN_WEAR( wear_prog_headguard );
DECLARE_OPROG_FUN_REMOVE( remove_prog_headguard );
DECLARE_OPROG_FUN_WEAR( wear_prog_blackguard );
DECLARE_OPROG_FUN_REMOVE( remove_prog_blackguard );
void raw_kill args( ( CHAR_DATA *victim ) );
void raw_kill_org args( ( CHAR_DATA *victim, int part ) );
void oprog_set(OBJ_INDEX_DATA *objindex,const char *progtype, const char *name)
{
if (!str_cmp(progtype, "wear_prog"))
{
/*
* if (!str_cmp(name, "wear_prog_"))
* objindex->mprogs->wear_prog = wear_prog_;
* else if (!str_cmp(name, "wear_prog_")) ...
*/
if (!str_cmp(name, "wear_prog_excalibur"))
objindex->oprogs->wear_prog = wear_prog_excalibur;
else if (!str_cmp(name, "wear_prog_bracer"))
objindex->oprogs->wear_prog = wear_prog_bracer;
else if (!str_cmp(name, "wear_prog_coconut"))
objindex->oprogs->wear_prog = wear_prog_coconut;
else if (!str_cmp(name, "wear_prog_firegauntlets"))
objindex->oprogs->wear_prog = wear_prog_firegauntlets;
else if (!str_cmp(name, "wear_prog_armbands"))
objindex->oprogs->wear_prog = wear_prog_armbands;
else if (!str_cmp(name, "wear_prog_demonfireshield"))
objindex->oprogs->wear_prog = wear_prog_demonfireshield;
else if (!str_cmp(name, "wear_prog_ranger_staff"))
objindex->oprogs->wear_prog = wear_prog_ranger_staff;
else if (!str_cmp(name, "wear_prog_wind_boots"))
objindex->oprogs->wear_prog = wear_prog_wind_boots;
else if (!str_cmp(name, "wear_prog_boots_flying"))
objindex->oprogs->wear_prog = wear_prog_boots_flying;
else if (!str_cmp(name, "wear_prog_arm_hercules"))
objindex->oprogs->wear_prog = wear_prog_arm_hercules;
else if (!str_cmp(name, "wear_prog_girdle_giant"))
objindex->oprogs->wear_prog = wear_prog_girdle_giant;
else if (!str_cmp(name, "wear_prog_breastplate_strength"))
objindex->oprogs->wear_prog = wear_prog_breastplate_strength;
else if (!str_cmp(name, "wear_prog_katana_sword"))
objindex->oprogs->wear_prog = wear_prog_katana_sword;
else if (!str_cmp(name, "wear_prog_eyed_sword"))
objindex->oprogs->wear_prog = wear_prog_eyed_sword;
else if (!str_cmp(name, "wear_prog_snake"))
objindex->oprogs->wear_prog = wear_prog_snake;
else if (!str_cmp(name, "wear_prog_fire_shield"))
objindex->oprogs->wear_prog = wear_prog_fire_shield;
else if (!str_cmp(name, "wear_prog_quest_weapon"))
objindex->oprogs->wear_prog = wear_prog_quest_weapon;
else if (!str_cmp(name, "wear_prog_ancient_gloves"))
objindex->oprogs->wear_prog = wear_prog_ancient_gloves;
else if (!str_cmp(name, "wear_prog_ancient_shield"))
objindex->oprogs->wear_prog = wear_prog_ancient_shield;
else if (!str_cmp(name, "wear_prog_neckguard"))
objindex->oprogs->wear_prog = wear_prog_neckguard;
else if (!str_cmp(name, "wear_prog_headguard"))
objindex->oprogs->wear_prog = wear_prog_headguard;
else if (!str_cmp(name, "wear_prog_blackguard"))
objindex->oprogs->wear_prog = wear_prog_blackguard;
else
{
bug("Load_oprogs: 'O': Function not found for vnum %d",
objindex->vnum);
exit(1);
}
SET_BIT(objindex->progtypes, OPROG_WEAR);
return;
}
if (!str_cmp(progtype, "remove_prog"))
{
if (!str_cmp(name,"remove_prog_excalibur"))
objindex->oprogs->remove_prog = remove_prog_excalibur;
else if (!str_cmp(name, "remove_prog_bracer"))
objindex->oprogs->remove_prog = remove_prog_bracer;
else if (!str_cmp(name, "remove_prog_coconut"))
objindex->oprogs->remove_prog = remove_prog_coconut;
else if (!str_cmp(name, "remove_prog_firegauntlets"))
objindex->oprogs->remove_prog = remove_prog_firegauntlets;
else if (!str_cmp(name, "remove_prog_armbands"))
objindex->oprogs->remove_prog = remove_prog_armbands;
else if (!str_cmp(name, "remove_prog_demonfireshield"))
objindex->oprogs->remove_prog = remove_prog_demonfireshield;
else if (!str_cmp(name, "remove_prog_wind_boots"))
objindex->oprogs->remove_prog = remove_prog_wind_boots;
else if (!str_cmp(name, "remove_prog_boots_flying"))
objindex->oprogs->remove_prog = remove_prog_boots_flying;
else if (!str_cmp(name, "remove_prog_arm_hercules"))
objindex->oprogs->remove_prog = remove_prog_arm_hercules;
else if (!str_cmp(name, "remove_prog_girdle_giant"))
objindex->oprogs->remove_prog = remove_prog_girdle_giant;
else if (!str_cmp(name, "remove_prog_breastplate_strength"))
objindex->oprogs->remove_prog = remove_prog_breastplate_strength;
else if (!str_cmp(name, "remove_prog_snake"))
objindex->oprogs->remove_prog = remove_prog_snake;
else if (!str_cmp(name, "remove_prog_fire_shield"))
objindex->oprogs->remove_prog = remove_prog_fire_shield;
else if (!str_cmp(name, "remove_prog_ancient_gloves"))
objindex->oprogs->remove_prog = remove_prog_ancient_gloves;
else if (!str_cmp(name, "remove_prog_ancient_shield"))
objindex->oprogs->remove_prog = remove_prog_ancient_shield;
else if (!str_cmp(name, "remove_prog_neckguard"))
objindex->oprogs->remove_prog = remove_prog_neckguard;
else if (!str_cmp(name, "remove_prog_headguard"))
objindex->oprogs->remove_prog = remove_prog_headguard;
else if (!str_cmp(name, "remove_prog_blackguard"))
objindex->oprogs->remove_prog = remove_prog_blackguard;
else
{
bug("Load_oprogs: 'O': Function not found for vnum %d",
objindex->vnum);
exit(1);
}
SET_BIT(objindex->progtypes, OPROG_REMOVE);
return;
}
if (!str_cmp(progtype, "get_prog"))
{
if (!str_cmp(name,"get_prog_cabal_item"))
objindex->oprogs->get_prog = get_prog_cabal_item;
else if (!str_cmp(name, "get_prog_heart"))
objindex->oprogs->get_prog = get_prog_heart;
else if (!str_cmp(name, "get_prog_coconut"))
objindex->oprogs->get_prog = get_prog_coconut;
else if (!str_cmp(name, "get_prog_spec_weapon"))
objindex->oprogs->get_prog = get_prog_spec_weapon;
else if (!str_cmp(name, "get_prog_quest_obj"))
objindex->oprogs->get_prog = get_prog_quest_obj;
else if (!str_cmp(name, "get_prog_snake"))
objindex->oprogs->get_prog = get_prog_snake;
else if (!str_cmp(name, "get_prog_quest_reward"))
objindex->oprogs->get_prog = get_prog_quest_reward;
else if (!str_cmp(name, "get_prog_quest_hreward"))
objindex->oprogs->get_prog = get_prog_quest_hreward;
else
{
bug("Load_oprogs: 'O': Function not found for vnum %d",
objindex->vnum);
exit(1);
}
SET_BIT(objindex->progtypes, OPROG_GET);
return;
}
if (!str_cmp(progtype, "drop_prog"))
{
/*
if (!str_cmp(name, "drop_prog_"))
objindex->oprogs->drop_prog = drop_prog_;
else
*/
{
bug("Load_oprogs: 'O': Function not found for vnum %d",
objindex->vnum);
exit(1);
}
SET_BIT(objindex->progtypes, OPROG_DROP);
return;
}
/*
* returning TRUE prevents destruction, gives player gold
*/
if (!str_cmp(progtype, "sac_prog"))
{
if (!str_cmp(name, "sac_prog_excalibur"))
objindex->oprogs->sac_prog = sac_prog_excalibur;
else if (!str_cmp(name, "sac_prog_cabal_item"))
objindex->oprogs->sac_prog = sac_prog_cabal_item;
else
{
bug("Load_oprogs: 'O': Function not found for vnum %d",
objindex->vnum);
exit(1);
}
SET_BIT(objindex->progtypes, OPROG_SAC);
return;
}
if (!str_cmp(progtype, "entry_prog"))
{
if (!str_cmp(name, "entry_prog_coconut"))
objindex->oprogs->entry_prog = entry_prog_coconut;
else
{
bug("Load_oprogs: 'O': Function not found for vnum %d",
objindex->vnum);
exit(1);
}
SET_BIT(objindex->progtypes, OPROG_ENTRY);
return;
}
if (!str_cmp(progtype, "give_prog"))
{
/*
if (!str_cmp(name, "give_prog_"))
objindex->oprogs->give_prog = give_prog_;
else
*/
{
bug("Load_oprogs: 'O': Function not found for vnum %d",
objindex->vnum);
exit(1);
}
SET_BIT(objindex->progtypes, OPROG_GIVE);
return;
}
if (!str_cmp(progtype, "greet_prog"))
{
if (!str_cmp(name, "greet_prog_coconut"))
objindex->oprogs->greet_prog = greet_prog_coconut;
else
{
bug("Load_oprogs: 'O': Function not found for vnum %d",
objindex->vnum);
exit(1);
}
SET_BIT(objindex->progtypes, OPROG_GREET);
return;
}
if (!str_cmp(progtype, "fight_prog"))
{
if (!str_cmp(name, "fight_prog_ranger_staff"))
objindex->oprogs->fight_prog = fight_prog_ranger_staff;
else if (!str_cmp(name, "fight_prog_sub_weapon"))
objindex->oprogs->fight_prog = fight_prog_sub_weapon;
else if (!str_cmp(name, "fight_prog_chaos_blade"))
objindex->oprogs->fight_prog = fight_prog_chaos_blade;
else if (!str_cmp(name, "fight_prog_tattoo_apollon"))
objindex->oprogs->fight_prog = fight_prog_tattoo_apollon;
else if (!str_cmp(name, "fight_prog_tattoo_zeus"))
objindex->oprogs->fight_prog = fight_prog_tattoo_zeus;
else if (!str_cmp(name, "fight_prog_tattoo_siebele"))
objindex->oprogs->fight_prog = fight_prog_tattoo_siebele;
else if (!str_cmp(name, "fight_prog_tattoo_ahrumazda"))
objindex->oprogs->fight_prog = fight_prog_tattoo_ahrumazda;
else if (!str_cmp(name, "fight_prog_tattoo_hephaestus"))
objindex->oprogs->fight_prog = fight_prog_tattoo_hephaestus;
else if (!str_cmp(name, "fight_prog_tattoo_ehrumen"))
objindex->oprogs->fight_prog = fight_prog_tattoo_ehrumen;
else if (!str_cmp(name, "fight_prog_tattoo_venus"))
objindex->oprogs->fight_prog = fight_prog_tattoo_venus;
else if (!str_cmp(name, "fight_prog_tattoo_deimos"))
objindex->oprogs->fight_prog = fight_prog_tattoo_deimos;
else if (!str_cmp(name, "fight_prog_tattoo_odin"))
objindex->oprogs->fight_prog = fight_prog_tattoo_odin;
else if (!str_cmp(name, "fight_prog_tattoo_phobos"))
objindex->oprogs->fight_prog = fight_prog_tattoo_phobos;
else if (!str_cmp(name, "fight_prog_tattoo_mars"))
objindex->oprogs->fight_prog = fight_prog_tattoo_mars;
else if (!str_cmp(name, "fight_prog_tattoo_athena"))
objindex->oprogs->fight_prog = fight_prog_tattoo_athena;
else if (!str_cmp(name, "fight_prog_golden_weapon"))
objindex->oprogs->fight_prog = fight_prog_golden_weapon;
else if (!str_cmp(name, "fight_prog_snake"))
objindex->oprogs->fight_prog = fight_prog_snake;
else if (!str_cmp(name, "fight_prog_tattoo_prometheus"))
objindex->oprogs->fight_prog = fight_prog_tattoo_prometheus;
else if (!str_cmp(name, "fight_prog_tattoo_goktengri"))
objindex->oprogs->fight_prog = fight_prog_tattoo_goktengri;
else if (!str_cmp(name, "fight_prog_shockwave"))
objindex->oprogs->fight_prog = fight_prog_shockwave;
else if (!str_cmp(name, "fight_prog_firegauntlets"))
objindex->oprogs->fight_prog = fight_prog_firegauntlets;
else if (!str_cmp(name, "fight_prog_armbands"))
objindex->oprogs->fight_prog = fight_prog_armbands;
else if (!str_cmp(name, "fight_prog_demonfireshield"))
objindex->oprogs->fight_prog = fight_prog_demonfireshield;
else if (!str_cmp(name, "fight_prog_vorbalblade"))
objindex->oprogs->fight_prog = fight_prog_vorbalblade;
else if (!str_cmp(name, "fight_prog_rose_shield"))
objindex->oprogs->fight_prog = fight_prog_rose_shield;
else if (!str_cmp(name, "fight_prog_lion_claw"))
objindex->oprogs->fight_prog = fight_prog_lion_claw;
else if (!str_cmp(name, "fight_prog_tattoo_hera"))
objindex->oprogs->fight_prog = fight_prog_tattoo_hera;
else if (!str_cmp(name, "fight_prog_tattoo_ares"))
objindex->oprogs->fight_prog = fight_prog_tattoo_ares;
else if (!str_cmp(name, "fight_prog_tattoo_eros"))
objindex->oprogs->fight_prog = fight_prog_tattoo_eros;
else if (!str_cmp(name, "fight_prog_ancient_gloves"))
objindex->oprogs->fight_prog = fight_prog_ancient_gloves;
else if (!str_cmp(name, "fight_prog_ancient_shield"))
objindex->oprogs->fight_prog = fight_prog_ancient_shield;
else
{
bug("Load_oprogs: 'O': Function not found for vnum %d",
objindex->vnum);
exit(1);
}
SET_BIT(objindex->progtypes, OPROG_FIGHT);
return;
}
if (!str_cmp(progtype, "death_prog")) /* returning TRUE prevents death */
{
if (!str_cmp(name, "death_prog_excalibur"))
objindex->oprogs->death_prog = death_prog_excalibur;
else if (!str_cmp(name, "death_prog_ranger_staff"))
objindex->oprogs->death_prog = death_prog_ranger_staff;
else if (!str_cmp(name, "death_prog_chaos_blade"))
objindex->oprogs->death_prog = death_prog_chaos_blade;
else if (!str_cmp(name, "death_prog_golden_weapon"))
objindex->oprogs->death_prog = death_prog_golden_weapon;
else
{
bug("Load_oprogs: 'O': Function not found for vnum %d",
objindex->vnum);
exit(1);
}
SET_BIT(objindex->progtypes, OPROG_DEATH);
return;
}
if (!str_cmp(progtype, "speech_prog"))
{
if (!str_cmp(name, "speech_prog_excalibur"))
objindex->oprogs->speech_prog = speech_prog_excalibur;
else if(!str_cmp(name, "speech_prog_kassandra"))
objindex->oprogs->speech_prog = speech_prog_kassandra;
else if(!str_cmp(name, "speech_prog_ring_ra"))
objindex->oprogs->speech_prog = speech_prog_ring_ra;
else
{
bug("Load_oprogs: 'O': Function not found for vnum %d",
objindex->vnum);
exit(1);
}
SET_BIT(objindex->progtypes, OPROG_SPEECH);
return;
}
if (!str_cmp(progtype, "area_prog"))
{
/*
if (!str_cmp(name, "area_prog_"))
objindex->oprogs->area_prog = area_prog_;
else
*/
{
bug("Load_oprogs: 'O': Function not found for vnum %d",
objindex->vnum);
exit(1);
}
SET_BIT(objindex->progtypes, OPROG_AREA);
return;
}
bug( "Load_oprogs: 'O': invalid program type for vnum %d",objindex->vnum);
exit(1);
}
void wear_prog_excalibur(OBJ_DATA *obj, CHAR_DATA *ch)
{
act("$p begins to shine a bright white.",ch,obj,NULL,TO_CHAR);
act("$p begins to shine a bright white.",ch,obj,NULL,TO_ROOM);
if ( ch->level > 20 && ch->level <= 30) obj->value[2] = 4;
else if ( ch->level > 30 && ch->level <= 40) obj->value[2] = 5;
else if ( ch->level > 40 && ch->level <= 50) obj->value[2] = 6;
else if ( ch->level > 50 && ch->level <= 60) obj->value[2] = 7;
else if ( ch->level > 60 && ch->level <= 70) obj->value[2] = 9;
else if ( ch->level > 70 && ch->level <= 80) obj->value[2] = 11;
else obj->value[2] = 12;
return;
}
void wear_prog_bracer(OBJ_DATA *obj, CHAR_DATA *ch)
{
AFFECT_DATA af;
if (!is_affected(ch, gsn_haste))
{
send_to_char("As you slide your arms into these bracers, they mold to your skin.\n\r", ch);
send_to_char("Your hands and arms feel incredibly light.\n\r", ch);
af.where = TO_AFFECTS;
af.type = gsn_haste;
af.duration = -2;
af.level = ch->level;
af.bitvector = AFF_HASTE;
af.location = APPLY_DEX;
af.modifier = 1 + (ch->level >= 18) + (ch->level >= 30) + (ch->level >= 45);
affect_to_char(ch, &af);
}
}
void remove_prog_bracer(OBJ_DATA *obj, CHAR_DATA *ch)
{
if (is_affected(ch, gsn_haste))
{
affect_strip(ch, gsn_haste);
send_to_char("Your hands and arms feel heavy again.\n\r", ch);
}
}
void remove_prog_excalibur(OBJ_DATA *obj, CHAR_DATA *ch)
{
act("$p stops glowing.",ch,obj,NULL,TO_CHAR);
act("$p stops glowing.",ch,obj,NULL,TO_ROOM);
}
bool death_prog_excalibur(OBJ_DATA *obj, CHAR_DATA *ch)
{
act_new("$p starts to glow with a blue aura.",ch,obj,NULL,TO_CHAR,POS_DEAD);
act("$p starts to glow with a blue aura,",ch,obj,NULL,TO_ROOM);
ch->hit = ch->max_hit;
send_to_char("You feel much better.",ch);
act("$n looks much better.",ch,NULL,NULL,TO_ROOM);
return TRUE;
}
void speech_prog_excalibur(OBJ_DATA *obj, CHAR_DATA *ch, char *speech)
{
if (!str_cmp(speech, "sword of acid")
&& (ch->fighting) && is_wielded_char(ch,obj) )
{
send_to_char("Acid sprays from the blade of Excalibur.\n\r",ch);
act("Acid sprays from the blade of Excalibur.",ch,NULL,NULL,TO_ROOM);
obj_cast_spell(gsn_acid_blast,ch->level,ch,ch->fighting,NULL);
WAIT_STATE(ch, 2 * PULSE_VIOLENCE);
}
}
bool sac_prog_excalibur(OBJ_DATA *obj, CHAR_DATA *ch)
{
act("The gods are infuriated!",ch,NULL,NULL,TO_CHAR);
act("The gods are infuriated!",ch,NULL,NULL,TO_ROOM);
damage(ch,ch,
(ch->hit - 1) > 1000? 1000 : (ch->hit - 1),
TYPE_HIT,DAM_HOLY, TRUE);
ch->gold = 0;
return TRUE;
}
void fight_prog_ranger_staff(OBJ_DATA *obj, CHAR_DATA *ch)
{
if ( is_wielded_char(ch,obj) && number_percent() < 10)
{
send_to_char("Your ranger's staff glows blue!\n\r",ch);
act("$n's ranger's staff glows blue!",ch,NULL,NULL,TO_ROOM);
obj_cast_spell(gsn_cure_critical,ch->level,ch,ch,obj);
}
}
void fight_prog_sub_weapon(OBJ_DATA *obj, CHAR_DATA *ch)
{
if (is_wielded_char(ch,obj) && number_percent() < 30)
{
if ( ((float) ch->hit)/((float) ch->max_hit) > 0.9)
send_to_char("Your weapon whispers, 'You're doing great!'\n\r",ch);
else if ( ((float) ch->hit)/((float) ch->max_hit) > 0.6)
send_to_char("Your weapon whispers, 'Keep up the good work!'\n\r",ch);
else if ( ((float) ch->hit)/((float) ch->max_hit) > 0.4)
send_to_char("Your weapon whispers, 'You can do it!'\n\r",ch);
else send_to_char("Your weapon whispers, 'Run away! Run away!'\n\r",ch);
}
}
bool death_prog_ranger_staff(OBJ_DATA *obj, CHAR_DATA *ch)
{
send_to_char("Your ranger's staff disappears.\n\r",ch);
act("$n's ranger's staff disappears.",ch,NULL,NULL,TO_ROOM);
extract_obj(obj);
return FALSE;
}
void get_prog_spec_weapon(OBJ_DATA *obj, CHAR_DATA *ch)
{
if ( strstr( obj->extra_descr->description, ch->name ) != NULL )
{
if ( IS_AFFECTED( ch, AFF_POISON ) && (dice(1,5)==1) ) {
send_to_char( "Your weapon glows blue.", ch );
act( "$n's weapon glows blue.", ch, NULL, NULL, TO_ROOM );
spell_cure_poison( gsn_cure_poison, 30, ch, ch, TARGET_CHAR );
return;
}
if ( IS_AFFECTED( ch, AFF_CURSE ) && (dice(1,5)==1) ) {
send_to_char( "Your weapon glows blue.", ch );
act( "$n's weapon glows blue.", ch, NULL, NULL, TO_ROOM );
spell_remove_curse( gsn_remove_curse, 30, ch, ch, TARGET_CHAR );
return;
}
send_to_char( "Your weapon's humming gets lauder.\n\r", ch );
return;
}
act( "You are zapped by $p and drop it.", ch, obj, NULL, TO_CHAR );
obj_from_char( obj );
obj_to_room( obj, ch->in_room );
switch( dice(1, 10) ) {
case 1:
spell_curse( gsn_curse, ch->level < 10? 1 : ch->level-9, ch, ch, TARGET_CHAR );
break;
case 2:
spell_poison( gsn_poison, ch->level < 10? 1 : ch->level-9, ch, ch, TARGET_CHAR );
break;
}
return;
}
void get_prog_quest_hreward(OBJ_DATA *obj, CHAR_DATA *ch)
{
if ( strstr( obj->extra_descr->description, ch->name ) != NULL )
{
act_color("$CYour $p starts glowing.\n\r$c",
ch,obj,NULL,TO_CHAR,POS_SLEEPING,CLR_BLUE);
return;
}
act( "You are zapped by $p and drop it.", ch, obj, NULL, TO_CHAR );
obj_from_char( obj );
obj_to_room( obj, ch->in_room );
return;
}
void get_prog_quest_obj(OBJ_DATA *obj, CHAR_DATA *ch)
{
if ( strstr( obj->extra_descr->description, ch->name ) != NULL )
{
if ( IS_AFFECTED( ch, AFF_POISON ) && (dice(1,5)==1) ) {
send_to_char( "Your weapon glows blue.", ch );
act( "$n's weapon glows blue.", ch, NULL, NULL, TO_ROOM );
spell_cure_poison( gsn_cure_poison, 30, ch, ch, TARGET_CHAR );
return;
}
if ( IS_AFFECTED( ch, AFF_CURSE ) && (dice(1,5)==1) ) {
send_to_char( "Your weapon glows blue.", ch );
act( "$n's weapon glows blue.", ch, NULL, NULL, TO_ROOM );
spell_remove_curse( gsn_remove_curse, 30, ch, ch, TARGET_CHAR );
return;
}
send_to_char( "Quest staff waits patiently to return.\n\r", ch );
return;
}
act( "You are zapped by $p and drop it.", ch, obj, NULL, TO_CHAR );
obj_from_char( obj );
obj_to_room( obj, ch->in_room );
switch( dice(1, 10) ) {
case 1:
spell_curse( gsn_curse, ch->level < 10? 1 : ch->level-9, ch, ch, TARGET_CHAR );
break;
case 2:
spell_poison( gsn_poison, ch->level < 10? 1 : ch->level-9, ch, ch, TARGET_CHAR );
break;
}
return;
}
void get_prog_cabal_item(OBJ_DATA *obj, CHAR_DATA *ch)
{
if (IS_NPC(ch))
{
act("You are not worthy to have $p and drop it.",
ch, obj, NULL, TO_CHAR);
act("$n is not worthy to have $p and drops it.",
ch, obj, NULL, TO_ROOM);
obj_from_char(obj);
obj_to_room(obj, ch->in_room);
return;
}
if (obj->timer < 1)
{
obj->timer = 30;
act("$p becomes transparent.", ch, obj, NULL, TO_CHAR);
act("$p becomes transparent.", ch, obj, NULL, TO_ROOM);
}
}
bool sac_prog_cabal_item(OBJ_DATA *obj, CHAR_DATA *ch)
{
OBJ_DATA *container;
char buf[160];
int i;
act("The gods are infuriated!",ch,NULL,NULL,TO_CHAR);
act("The gods are infuriated!",ch,NULL,NULL,TO_ROOM);
damage(ch,ch,(int)(ch->hit/10),TYPE_HIT,DAM_HOLY, TRUE);
ch->gold = 0;
obj_from_room(obj);
for(i=0;i<MAX_CABAL;i++)
if (cabal_table[i].obj_ptr == obj) break;
if ( i < MAX_CABAL )
{
if ( obj->pIndexData->vnum == cabal_table[CABAL_RULER].obj_vnum )
container = create_object( get_obj_index( OBJ_VNUM_RULER_STAND ),100 );
else if ( obj->pIndexData->vnum == cabal_table[CABAL_INVADER].obj_vnum)
container = create_object( get_obj_index( OBJ_VNUM_INVADER_SKULL ),100 );
else if ( obj->pIndexData->vnum == cabal_table[CABAL_BATTLE].obj_vnum )
container = create_object( get_obj_index( OBJ_VNUM_BATTLE_THRONE ),100 );
else if ( obj->pIndexData->vnum == cabal_table[CABAL_KNIGHT].obj_vnum )
container = create_object( get_obj_index( OBJ_VNUM_KNIGHT_ALTAR ), 100 );
else if ( obj->pIndexData->vnum == cabal_table[CABAL_CHAOS].obj_vnum )
container = create_object( get_obj_index( OBJ_VNUM_CHAOS_ALTAR ), 100 );
else if ( obj->pIndexData->vnum == cabal_table[CABAL_LIONS].obj_vnum )
container = create_object( get_obj_index( OBJ_VNUM_LIONS_ALTAR ), 100 );
else if ( obj->pIndexData->vnum == cabal_table[CABAL_HUNTER].obj_vnum )
container = create_object( get_obj_index( OBJ_VNUM_HUNTER_ALTAR ), 100 );
else
container = create_object( get_obj_index( OBJ_VNUM_SHALAFI_ALTAR),100 );
obj_to_obj( obj, container );
obj_to_room( container, get_room_index(cabal_table[i].room_vnum) );
sprintf( buf, "You see %s forming again slowly.\n\r",
container->short_descr );
if ( get_room_index(cabal_table[i].room_vnum)->people != NULL )
{
act( buf, get_room_index(cabal_table[i].room_vnum)->people,NULL,NULL, TO_CHAR);
act( buf, get_room_index(cabal_table[i].room_vnum)->people,NULL,NULL, TO_ROOM);
}
return TRUE;
}
else
{
extract_obj(obj);
bug( "oprog: Sac_cabal_item: Was not the cabal's item.", 0);
}
return FALSE;
}
void speech_prog_kassandra(OBJ_DATA *obj, CHAR_DATA *ch, char *speech)
{
if (!str_cmp(speech, "kassandra") && (get_hold_char(ch) == obj)
&& !IS_NPC(ch))
obj_cast_spell(gsn_kassandra,ch->level,ch,ch,NULL);
else if (!str_cmp(speech, "sebat") && (get_hold_char(ch) == obj)
&& !IS_NPC(ch))
obj_cast_spell(gsn_sebat,ch->level,ch,ch,NULL);
else if (!str_cmp(speech, "matandra") && (get_hold_char(ch) == obj)
&& (ch->fighting) && !IS_NPC(ch))
{
act("A blast of energy bursts from your hand toward $N!",
ch,NULL,ch->fighting,TO_CHAR);
act("A blast of energy bursts from $n's hand toward you!",
ch,NULL,ch->fighting,TO_VICT);
act("A blast of energy bursts from $n's hand toward $N!",
ch,NULL,ch->fighting,TO_NOTVICT);
obj_cast_spell(gsn_matandra,ch->level,ch,ch->fighting,NULL);
}
}
void fight_prog_chaos_blade(OBJ_DATA *obj, CHAR_DATA *ch)
{
if ( is_wielded_char(ch,obj) )
switch(number_bits(7)) {
case 0:
act("The chaotic blade trembles violently!", ch, NULL, NULL, TO_ROOM);
send_to_char("Your chaotic blade trembles violently!\n\r", ch);
obj_cast_spell(gsn_mirror,ch->level,ch,ch,obj);
WAIT_STATE(ch, 2 * PULSE_VIOLENCE);
break;
case 1:
act("The chaotic blade shakes a bit.", ch, NULL, NULL, TO_ROOM);
send_to_char("Your chaotic blade shakes a bit.\n\r", ch);
obj_cast_spell(gsn_garble,ch->level,ch,ch->fighting,obj);
WAIT_STATE(ch, 2 * PULSE_VIOLENCE);
break;
case 2:
act("The chaotic blade shivers uncontrollably!",ch,NULL,NULL,TO_ROOM);
send_to_char("Your chaotic blade shivers uncontrollably!\n\r",ch);
obj_cast_spell(gsn_confuse, ch->level,ch,ch->fighting,obj);
WAIT_STATE(ch, 2 * PULSE_VIOLENCE);
break;
}
}
bool death_prog_chaos_blade(OBJ_DATA *obj, CHAR_DATA *ch)
{
send_to_char("Your chaotic blade disappears.\n\r",ch);
act("$n's chaotic blade disappears.",ch,NULL,NULL,TO_ROOM);
extract_obj(obj);
return FALSE;
}
void fight_prog_tattoo_apollon(OBJ_DATA *obj, CHAR_DATA *ch)
{
int sn;
if (get_eq_char(ch, WEAR_TATTOO) == obj)
switch(number_bits(6)) {
case 0:
case 1:
act_color("$CThe tattoo on your shoulder glows blue.$c",
ch,NULL,NULL,TO_CHAR,POS_DEAD,CLR_CYAN);
obj_cast_spell(gsn_cure_serious, ch->level, ch, ch, obj);
break;
case 2:
act_color("$CThe tattoo on your shoulder glows red.$c",
ch,NULL,NULL,TO_CHAR,POS_DEAD,CLR_RED);
do_yell( ch, "Ever dance with good....");
sn = skill_lookup("holy word");
spell_holy_word(sn,ch->level,ch,NULL,TARGET_CHAR);
break;
}
}
void fight_prog_tattoo_zeus(OBJ_DATA *obj, CHAR_DATA *ch)
{
if (get_eq_char(ch, WEAR_TATTOO) == obj)
switch(number_bits(6)) {
case 0:
case 1:
case 2:
act_color("$CThe tattoo on your shoulder glows blue.$c",
ch,NULL,NULL,TO_CHAR,POS_DEAD,CLR_CYAN);
obj_cast_spell(gsn_cure_critical, ch->level, ch, ch, obj);
break;
case 3:
act_color("$CThe tattoo on your shoulder glows blue.$c",
ch,NULL,NULL,TO_CHAR,POS_DEAD,CLR_CYAN);
if (IS_AFFECTED(ch,AFF_PLAGUE))
spell_cure_disease(25,100,ch,ch,TARGET_CHAR);
if (IS_AFFECTED(ch,AFF_POISON))
spell_cure_poison(27,100,ch,ch,TARGET_CHAR);
break;
}
}
void fight_prog_tattoo_siebele(OBJ_DATA *obj, CHAR_DATA *ch)
{
if (get_eq_char(ch, WEAR_TATTOO) == obj)
switch(number_bits(6)) {
case 0:
act_color("$CThe tattoo on your shoulder glows blue.$c",
ch,NULL,NULL,TO_CHAR,POS_DEAD,CLR_CYAN);
obj_cast_spell(gsn_cure_serious, ch->level, ch,ch, obj);
break;
case 1:
act_color("$CThe tattoo on your shoulder glows red.$c",
ch,NULL,NULL,TO_CHAR,POS_DEAD,CLR_RED);
spell_bluefire(gsn_dispel_good, ch->level, ch, ch->fighting, TARGET_CHAR);
break;
}
}
void fight_prog_tattoo_ahrumazda(OBJ_DATA *obj, CHAR_DATA *ch)
{
if (get_eq_char(ch, WEAR_TATTOO) == obj)
switch(number_bits(6)) {
case 0:
act_color("$CThe tattoo on your shoulder glows blue.$c",
ch,NULL,NULL,TO_CHAR,POS_DEAD,CLR_BLUE);
obj_cast_spell(gsn_cure_serious, ch->level, ch, ch, obj);
break;
case 1:
act_color("$CThe tattoo on your shoulder glows red.$c",
ch,NULL,NULL,TO_CHAR,POS_DEAD,CLR_RED);
obj_cast_spell(gsn_demonfire, ch->level, ch, ch->fighting, obj);
break;
}
}
void fight_prog_tattoo_hephaestus(OBJ_DATA *obj, CHAR_DATA *ch)
{
if (get_eq_char(ch, WEAR_TATTOO) == obj)
switch(number_bits(6)) {
case 0:
case 1:
act_color("$CThe tattoo on your shoulder glows blue.$c",
ch,NULL,NULL,TO_CHAR,POS_DEAD,CLR_CYAN);
obj_cast_spell(gsn_cure_serious, ch->level, ch, ch, obj);
break;
case 2:
act_color("$CThe tattoo on your shoulder glows red.$c",
ch,NULL,NULL,TO_CHAR,POS_DEAD,CLR_RED);
do_yell(ch,"And justice for all!....");
spell_scream(gsn_scream,ch->level,ch,ch->fighting,TARGET_CHAR);
break;
}
}
void fight_prog_tattoo_ehrumen(OBJ_DATA *obj, CHAR_DATA *ch)
{
if (get_eq_char(ch, WEAR_TATTOO) == obj)
switch(number_bits(6)) {
case 0:
act_color("$CThe tattoo on your shoulder glows red.$c",
ch,NULL,NULL,TO_CHAR,POS_DEAD,CLR_RED);
obj_cast_spell(gsn_cure_light, ch->level, ch, ch->fighting, obj);
break;
case 1:
act_color("$CThe tattoo on your shoulder glows blue.$c",
ch,NULL,NULL,TO_CHAR,POS_DEAD,CLR_CYAN);
obj_cast_spell(gsn_cure_serious, ch->level, ch, ch, obj);
break;
case 2:
act_color("$CThe tattoo on your shoulder glows red.$c",
ch,NULL,NULL,TO_CHAR,POS_DEAD,CLR_RED);
spell_dispel_evil(gsn_dispel_evil, ch->level, ch, ch->fighting,TARGET_CHAR);
break;
}
}
void fight_prog_tattoo_venus(OBJ_DATA *obj, CHAR_DATA *ch)
{
if (get_eq_char(ch, WEAR_TATTOO) == obj)
switch(number_bits(7)) {
case 0:
case 1:
case 2:
act_color("$CThe tattoo on your shoulder glows blue.$c",
ch,NULL,NULL,TO_CHAR,POS_DEAD,CLR_CYAN);
obj_cast_spell(gsn_cure_light, ch->level, ch, ch, obj);
break;
case 3:
act_color("$CThe tattoo on your shoulder glows red.$c",
ch,NULL,NULL,TO_CHAR,POS_DEAD,CLR_RED);
obj_cast_spell(gsn_plague, ch->level, ch, ch->fighting, obj);
break;
case 4:
act_color("$CThe tattoo on your shoulder glows blue.$c",
ch,NULL,NULL,TO_CHAR,POS_DEAD,CLR_CYAN);
obj_cast_spell(gsn_bless, ch->level, ch, ch, obj);
break;
}
}
void fight_prog_tattoo_ares(OBJ_DATA *obj, CHAR_DATA *ch)
{
if (get_eq_char(ch, WEAR_TATTOO) == obj)
switch(number_bits(5)) {
case 0:
act_color("$CThe tattoo on your shoulder glows blue.$c",
ch,NULL,NULL,TO_CHAR,POS_DEAD,CLR_CYAN);
obj_cast_spell(gsn_dragon_strength, ch->level, ch, ch, obj);
break;
case 1:
act_color("$CThe tattoo on your shoulder glows RED.$c",
ch,NULL,NULL,TO_CHAR,POS_DEAD,CLR_RED);
obj_cast_spell(gsn_dragon_breath, ch->level, ch, ch->fighting, obj);
break;
}
}
void fight_prog_tattoo_odin(OBJ_DATA *obj, CHAR_DATA *ch)
{
if (get_eq_char(ch, WEAR_TATTOO) == obj)
switch(number_bits(5)) {
case 0:
act_color("$CThe tattoo on your shoulder glows blue.$c",
ch,NULL,NULL,TO_CHAR,POS_DEAD,CLR_CYAN);
obj_cast_spell(gsn_cure_critical, ch->level, ch, ch, obj);
break;
case 1:
act_color("$CThe tattoo on your shoulder glows red.$c",
ch,NULL,NULL,TO_CHAR,POS_DEAD,CLR_RED);
obj_cast_spell(gsn_faerie_fire, ch->level, ch, ch->fighting, obj);
break;
}
}
void fight_prog_tattoo_phobos(OBJ_DATA *obj, CHAR_DATA *ch)
{
int sn;
if (get_eq_char(ch, WEAR_TATTOO) == obj)
switch(number_bits(6)) {
case 0:
act_color("$CThe tattoo on your shoulder glows blue.$c",
ch,NULL,NULL,TO_CHAR,POS_DEAD,CLR_CYAN);
obj_cast_spell(gsn_cure_serious, ch->level, ch, ch, obj);
break;
case 1:
if ((sn = skill_lookup("colour spray")) < 0) break;
act_color("$CThe tattoo on your shoulder glows red.$c",
ch,NULL,NULL,TO_CHAR,POS_DEAD,CLR_RED);
obj_cast_spell(sn, ch->level, ch, ch->fighting, obj);
break;
}
}
void fight_prog_tattoo_mars(OBJ_DATA *obj, CHAR_DATA *ch)
{
if (get_eq_char(ch, WEAR_TATTOO) == obj)
switch(number_bits(7)) {
case 0:
obj_cast_spell(gsn_blindness, ch->level, ch, ch->fighting, obj);
send_to_char("You send out a cloud of confusion!\n\r", ch);
break;
case 1:
obj_cast_spell(gsn_poison, ch->level, ch, ch->fighting, obj);
send_to_char("Some of your insanity rubs off on your opponent.\n\r", ch);
break;
case 2:
obj_cast_spell(gsn_haste, ch->level, ch, ch, obj);
send_to_char("You suddenly feel more hyperactive!\n\r", ch);
break;
case 3:
obj_cast_spell(gsn_shield, ch->level, ch, ch, obj);
send_to_char("You feel even more paranoid!\n\r", ch);
break;
}
}
void fight_prog_tattoo_athena(OBJ_DATA *obj, CHAR_DATA *ch)
{
AFFECT_DATA af;
if(get_eq_char(ch, WEAR_TATTOO) == obj)
{
if (number_percent() < 50)
{
switch(number_bits(4)) {
case 0:
if (IS_AFFECTED(ch,AFF_BERSERK) || is_affected(ch,gsn_berserk)
|| is_affected(ch,skill_lookup("frenzy")))
{
send_to_char("You get a little madder.\n\r",ch);
return;
}
af.where = TO_AFFECTS;
af.type = gsn_berserk;
af.level = ch->level;
af.duration = ch->level / 3;
af.modifier = ch->level / 5;
af.bitvector = AFF_BERSERK;
af.location = APPLY_HITROLL;
affect_to_char(ch, &af);
af.location = APPLY_DAMROLL;
affect_to_char(ch, &af);
af.modifier = 10 * (ch->level / 10);
af.location = APPLY_AC;
affect_to_char(ch, &af);
ch->hit += ch->level * 2;
ch->hit = UMIN(ch->hit,ch->max_hit);
send_to_char("Your pulse races as you are consumned by rage!\n\r",
ch);
act("$n gets a wild look in $s eyes.",ch,NULL,NULL,TO_ROOM);
break;
}
}
else
{
switch(number_bits(4)) {
case 0:
do_yell(ch, "Cry Havoc and Let Loose the Dogs of War!");
break;
case 1:
do_yell(ch, "No Mercy!");
break;
case 2:
do_yell(ch, "Los Valdar Cuebiyari!");
break;
case 3:
do_yell(ch, "Carai an Caldazar! Carai an Ellisande! Al Ellisande!");
break;
case 4:
do_yell(ch, "Siempre Vive el Riesgo!");
break;
}
}
}
}
void fight_prog_tattoo_hera( OBJ_DATA *obj, CHAR_DATA *ch)
{
if (get_eq_char(ch, WEAR_TATTOO) == obj)
switch(number_bits(5)) {
case 0:
act_color("$CThe tattoo on your shoulder glows red.$c",
ch,NULL,NULL,TO_CHAR,POS_DEAD,CLR_RED);
obj_cast_spell(gsn_plague, ch->level, ch, ch->fighting, obj);
break;
case 1:
act_color("$CThe tattoo on your shoulder glows red.$c",
ch,NULL,NULL,TO_CHAR,POS_DEAD,CLR_RED);
obj_cast_spell(gsn_poison, ch->level, ch, ch->fighting, obj);
case 2:
act_color("$CThe tattoo on your shoulder glows red.$c",
ch,NULL,NULL,TO_CHAR,POS_DEAD,CLR_RED);
obj_cast_spell(gsn_weaken, ch->level, ch, ch->fighting, obj);
case 3:
act_color("$CThe tattoo on your shoulder glows red.$c",
ch,NULL,NULL,TO_CHAR,POS_DEAD,CLR_RED);
obj_cast_spell(gsn_slow, ch->level, ch, ch->fighting, obj);
break;
}
}
void fight_prog_tattoo_deimos(OBJ_DATA *obj, CHAR_DATA *ch)
{
int sn;
if (get_eq_char(ch, WEAR_TATTOO) == obj)
switch(number_bits(6)) {
case 0:
case 1:
act_color("$CThe tattoo on your shoulder glows blue.$c",
ch,NULL,NULL,TO_CHAR,POS_DEAD,CLR_CYAN);
obj_cast_spell(gsn_cure_serious, ch->level, ch, ch, obj);
break;
case 2:
act_color("$CThe tattoo on your shoulder glows red.$c",
ch,NULL,NULL,TO_CHAR,POS_DEAD,CLR_RED);
sn = skill_lookup("web");
spell_web(sn, ch->level, ch, ch->fighting,TARGET_CHAR);
break;
}
}
void fight_prog_tattoo_eros(OBJ_DATA *obj, CHAR_DATA *ch)
{
int sn;
if (get_eq_char(ch, WEAR_TATTOO) == obj)
switch(number_bits(5)) {
case 0:
case 1:
if ((sn = skill_lookup("heal")) < 0) break;
act_color("$CThe tattoo on your shoulder glows blue.$c",
ch,NULL,NULL,TO_CHAR,POS_DEAD,CLR_CYAN);
obj_cast_spell(sn, ch->level, ch, ch, obj);
break;
case 2:
if ((sn = skill_lookup("mass healing")) < 0) break;
act_color("$CThe tattoo on your shoulder glows blue.$c",
ch,NULL,NULL,TO_CHAR,POS_DEAD,CLR_CYAN);
obj_cast_spell(sn, ch->level, ch, ch, obj);
break;
}
}
bool death_prog_golden_weapon(OBJ_DATA *obj, CHAR_DATA *ch)
{
send_to_char("Your golden weapon disappears.\n\r",ch);
act("$n's golden weapon disappears.",ch,NULL,NULL,TO_ROOM);
extract_obj(obj);
ch->hit = 1;
while ( ch->affected )
affect_remove( ch, ch->affected );
ch->last_fight_time = -1;
ch->last_death_time = current_time;
if (cabal_area_check(ch))
{
act("$n disappears.",ch,NULL,NULL,TO_ROOM);
char_from_room(ch);
char_to_room(ch, get_room_index( cabal_table[CABAL_KNIGHT].room_vnum ));
act("$n appears in the room.",ch,NULL,NULL,TO_ROOM);
}
return TRUE;
}
void fight_prog_golden_weapon(OBJ_DATA *obj, CHAR_DATA *ch)
{
if ( is_wielded_char(ch,obj) )
{
if (number_percent() < 4)
{
act("Your $p glows bright blue!\n\r",ch, obj, NULL, TO_CHAR);
act("$n's $p glows bright blue!",ch,obj,NULL,TO_ROOM);
obj_cast_spell(gsn_cure_critical,ch->level,ch,ch,obj);
return;
}
else if (number_percent() > 92)
{
act("Your $p glows bright blue!\n\r",ch, obj, NULL, TO_CHAR);
act("$n's $p glows bright blue!",ch,obj,NULL,TO_ROOM);
obj_cast_spell(gsn_cure_serious,ch->level,ch,ch,obj);
return;
}
}
}
void get_prog_heart(OBJ_DATA *obj, CHAR_DATA *ch)
{
if (obj->timer == 0)
obj->timer = 24;
}
void fight_prog_snake(OBJ_DATA *obj, CHAR_DATA *ch)
{
if ( is_wielded_char(ch,obj) )
{
switch(number_bits(7)) {
case 0:
act("One of the snake heads on your whip bites $N!", ch, NULL,
ch->fighting, TO_CHAR);
act("A snake from $n's whip strikes out and bites you!", ch, NULL,
ch->fighting, TO_VICT);
act("One of the snakes from $n's whip strikes at $N!", ch, NULL,
ch->fighting, TO_NOTVICT);
obj_cast_spell(gsn_poison, ch->level, ch, ch->fighting, obj);
break;
case 1:
act("One of the snake heads on your whip bites $N!", ch, NULL,
ch->fighting, TO_CHAR);
act("A snake from $n's whip strikes out and bites you!", ch, NULL,
ch->fighting, TO_VICT);
act("One of the snakes from $n's whip strikes at $N!", ch, NULL,
ch->fighting, TO_NOTVICT);
obj_cast_spell(gsn_weaken, ch->level, ch, ch->fighting, obj);
break;
}
}
}
void fight_prog_tattoo_prometheus(OBJ_DATA *obj, CHAR_DATA *ch)
{
if (get_eq_char(ch, WEAR_TATTOO) == obj)
switch(number_bits(5)) {
case 0:
act_color("$CThe tattoo on your shoulder glows blue.$c",
ch,NULL,NULL,TO_CHAR,POS_DEAD,CLR_CYAN);
obj_cast_spell(gsn_cure_critical, ch->level, ch, ch, obj);
break;
case 1:
case 2:
act_color("$CThe tattoo on your shoulder glows red.$c",
ch,NULL,NULL,TO_CHAR,POS_DEAD,CLR_RED);
if (IS_EVIL(ch->fighting))
spell_dispel_evil(gsn_dispel_evil,(int)(1.2* (float)ch->level), ch, ch->fighting,TARGET_CHAR);
else if (IS_GOOD(ch->fighting))
spell_dispel_good(gsn_dispel_good,(int)(1.2* (float)ch->level), ch, ch->fighting,TARGET_CHAR);
else
spell_lightning_bolt(64, (int)(1.2* (float)ch->level), ch, ch->fighting, TARGET_CHAR);
break;
}
}
void fight_prog_shockwave(OBJ_DATA *obj, CHAR_DATA *ch)
{
if ( is_wielded_char(ch,obj) )
switch(number_bits(5)) {
case 0:
act("A bolt of lightning arcs out from your bolt, hitting $N!", ch,
NULL, ch->fighting, TO_CHAR);
act("A bolt of lightning crackles along $n's bolt and arcs towards you!",
ch, NULL, ch->fighting, TO_VICT);
act("A bolt of lightning shoots out from $n's bolt, arcing towards $N!",
ch, NULL, ch->fighting, TO_NOTVICT);
obj_cast_spell(gsn_lightning_bolt, ch->level, ch, ch->fighting, NULL);
break;
}
}
void wear_prog_ranger_staff(OBJ_DATA *obj, CHAR_DATA *ch)
{
if ( ch->iclass != CLASS_RANGER )
{
send_to_char( "You don't know to use this thing.\n\r", ch );
unequip_char( ch, obj );
send_to_char( "Ranger staff slides off from your hand.\n\r", ch );
obj_from_char( obj );
obj_to_room( obj, ch->in_room );
return;
}
}
void wear_prog_coconut(OBJ_DATA *obj, CHAR_DATA *ch)
{
act("You start to bang the coconut shells together.",ch,NULL,NULL,TO_CHAR);
act("You hear a sound like horses galloping and you mount your steed.",
ch, NULL, NULL, TO_CHAR);
act("$n pretends to mount an invisible horse.",
ch,NULL,NULL,TO_ROOM);
}
void entry_prog_coconut(OBJ_DATA *obj)
{
if (obj->carried_by != NULL)
if (get_hold_char(obj->carried_by) == obj)
act("$n gallops in on his invisible steed, banging two coconuts together.",
obj->carried_by, NULL, NULL, TO_ROOM);
}
void greet_prog_coconut(OBJ_DATA *obj, CHAR_DATA *ch)
{
if (obj->carried_by != NULL)
{
if (get_hold_char(obj->carried_by) == obj &&
obj->carried_by != ch)
act("You hear the sound of galloping horses.", ch, NULL, NULL, TO_CHAR);
}
else
send_to_char("$p beckons with the faint sound of galloping horses.\n\r",
ch);
}
void get_prog_coconut(OBJ_DATA *obj, CHAR_DATA *ch)
{
send_to_char("You hold the coconut up to your ear and suddenly you hear the faint\n\rroar of galloping horses.\n\r", ch);
act("$n holds a coconut up to $s ear.", ch, NULL, NULL, TO_ROOM);
}
void remove_prog_coconut(OBJ_DATA *obj, CHAR_DATA *ch)
{
send_to_char("The sounds of horses fade away.\n\r", ch);
act("$n pretends to dismount a horse.", ch, NULL, NULL, TO_ROOM);
}
void fight_prog_firegauntlets( OBJ_DATA *obj, CHAR_DATA *ch )
{
int dam;
if (get_wield_char(ch,FALSE) != NULL )
return;
if ( get_eq_char( ch, WEAR_HANDS ) != obj )
return;
if ( number_percent() < 50 ) {
dam = dice( ch->level, 8) + number_percent() / 2;
act( "Your gauntlets burns $N's face!", ch, NULL, ch->fighting, TO_CHAR);
act( "$n's gauntlets burns $N's face!", ch, NULL, ch->fighting, TO_NOTVICT);
act( "$N's gauntlets burns your face!", ch->fighting, NULL, ch, TO_CHAR);
damage( ch, ch->fighting, dam/2, gsn_burning_hands, DAM_FIRE, TRUE);
if ( ch == NULL || ch->fighting == NULL )
return;
fire_effect( ch->fighting, obj->level/2, dam/2, TARGET_CHAR );
}
return;
}
void wear_prog_firegauntlets(OBJ_DATA *obj, CHAR_DATA *ch)
{
send_to_char( "Your hands warm up by the gauntlets.\n\r", ch );
return;
}
void remove_prog_firegauntlets(OBJ_DATA *obj, CHAR_DATA *ch)
{
send_to_char( "Your hands cool down.\n\r", ch );
return;
}
void fight_prog_armbands( OBJ_DATA *obj, CHAR_DATA *ch )
{
int dam;
if ( get_eq_char( ch, WEAR_ARMS ) != obj )
return;
if ( IS_NPC(ch ) )
return;
if ( number_percent() < 20 ) {
dam = number_percent()/2 + 30 + 5*ch->level;
act( "Your armbands burns $N's face!", ch, NULL, ch->fighting, TO_CHAR);
act( "$n's armbands burns $N's face!", ch, NULL, ch->fighting, TO_NOTVICT);
act( "$N's armbands burns your face!", ch->fighting, NULL, ch, TO_CHAR);
damage( ch, ch->fighting, dam, gsn_burning_hands, DAM_FIRE, TRUE);
if ( ch == NULL || ch->fighting == NULL )
return;
fire_effect( ch->fighting, obj->level/2, dam, TARGET_CHAR );
}
return;
}
void wear_prog_armbands(OBJ_DATA *obj, CHAR_DATA *ch)
{
send_to_char( "Your arms warm up by the armbands of the volcanoes.\n\r", ch );
return;
}
void remove_prog_armbands(OBJ_DATA *obj, CHAR_DATA *ch)
{
send_to_char( "Your arms cool down again.\n\r", ch );
return;
}
void fight_prog_demonfireshield( OBJ_DATA *obj, CHAR_DATA *ch )
{
int dam;
if ( get_shield_char( ch ) != obj )
return;
if ( number_percent() < 15 ) {
dam = number_percent()/2 + 5 * ch->level;
act( "A magical hole appears in your shield !", ch, NULL, ch->fighting, TO_CHAR);
act( "Your shield burns $N's face!", ch, NULL, ch->fighting, TO_CHAR);
act( "$n's shield burns $N's face!", ch, NULL, ch->fighting, TO_NOTVICT);
act( "$N's shield burns your face!", ch->fighting, NULL, ch, TO_CHAR);
fire_effect( ch->fighting, obj->level,dam, TARGET_CHAR );
damage( ch, ch->fighting, dam, gsn_demonfire, DAM_FIRE, TRUE);
}
return;
}
void wear_prog_demonfireshield(OBJ_DATA *obj, CHAR_DATA *ch)
{
send_to_char( "Your hands warm up by the fire shield.\n\r", ch );
return;
}
void remove_prog_demonfireshield(OBJ_DATA *obj, CHAR_DATA *ch)
{
send_to_char( "Your hands cool down.\n\r", ch );
return;
}
void fight_prog_vorbalblade( OBJ_DATA *obj, CHAR_DATA *ch )
{
CHAR_DATA *victim;
if ( IS_NPC(ch) )
return;
if ( !is_wielded_char( ch, obj ) )
return;
victim = ch->fighting;
if (!IS_EVIL(victim)) return;
if ( number_percent() < 10 ) {
send_to_char(
"Your weapon swings at your victim's neck without your control!\n\r", ch);
if ( number_percent() < 20 ) {
act( "It makes an huge arc in the air, chopping $N's head OFF!",
ch, NULL, victim, TO_CHAR);
act( "$N's weapon whistles in the air, chopping your head OFF!",
ch, NULL, victim, TO_NOTVICT);
act( "$n's weapon whistles in the air, chopping $N's head OFF!",
ch, NULL, victim, TO_ROOM);
act( "$n is DEAD!!", victim, NULL, NULL, TO_ROOM );
act( "$n is DEAD!!", victim, NULL, NULL, TO_CHAR );
raw_kill_org( victim, 3 );
send_to_char( "You have been KILLED!!\n\r", victim );
return;
}
}
return;
}
void wear_prog_wind_boots(OBJ_DATA *obj, CHAR_DATA *ch)
{
AFFECT_DATA af;
if (!is_affected(ch, gsn_fly))
{
send_to_char("As you wear wind boots on your feet, they hold you up.\n\r", ch);
send_to_char("You start to fly.\n\r", ch);
af.where = TO_AFFECTS;
af.type = gsn_fly;
af.duration = -2;
af.level = ch->level;
af.bitvector = AFF_FLYING;
af.location = 0;
af.modifier = 0;
affect_to_char(ch, &af);
}
}
void remove_prog_wind_boots(OBJ_DATA *obj, CHAR_DATA *ch)
{
if (is_affected(ch, gsn_fly))
{
affect_strip(ch, gsn_fly);
send_to_char("You fall down to the ground.\n\r", ch);
send_to_char("Ouch!.\n\r", ch);
}
}
void wear_prog_boots_flying(OBJ_DATA *obj, CHAR_DATA *ch)
{
AFFECT_DATA af;
if (!is_affected(ch, gsn_fly))
{
send_to_char("As you wear boots of flying on your feet, they hold you up.\n\r", ch);
send_to_char("You start to fly.\n\r", ch);
af.where = TO_AFFECTS;
af.type = gsn_fly;
af.duration = -2;
af.level = ch->level;
af.bitvector = AFF_FLYING;
af.location = 0;
af.modifier = 0;
affect_to_char(ch, &af);
}
}
void remove_prog_boots_flying(OBJ_DATA *obj, CHAR_DATA *ch)
{
if (is_affected(ch, gsn_fly))
{
affect_strip(ch, gsn_fly);
send_to_char("You fall down to the ground.\n\r", ch);
send_to_char("You start to walk again instead of flying!.\n\r", ch);
}
}
void wear_prog_arm_hercules(OBJ_DATA *obj, CHAR_DATA *ch)
{
AFFECT_DATA af;
if (!is_affected(ch, gsn_giant_strength))
{
send_to_char("As you wear your arms these plates, You feel your self getting stronger.\n\r", ch);
send_to_char("Your muscles seems incredibly huge.\n\r", ch);
af.where = TO_AFFECTS;
af.type = gsn_giant_strength;
af.duration = -2;
af.level = ch->level;
af.bitvector = 0;
af.location = APPLY_STR;
af.modifier = 1 + (ch->level >= 18) + (ch->level >= 30) + (ch->level >= 45);
affect_to_char(ch, &af);
}
}
void remove_prog_arm_hercules(OBJ_DATA *obj, CHAR_DATA *ch)
{
if (is_affected(ch, gsn_giant_strength))
{
affect_strip(ch, gsn_giant_strength);
send_to_char("Your muscles regain its original value.\n\r", ch);
}
}
void wear_prog_girdle_giant(OBJ_DATA *obj, CHAR_DATA *ch)
{
AFFECT_DATA af;
if (!is_affected(ch, gsn_giant_strength))
{
send_to_char("As you wear this girdle, You feel your self getting stronger.\n\r", ch);
send_to_char("Your muscles seems incredibly huge.\n\r", ch);
af.where = TO_AFFECTS;
af.type = gsn_giant_strength;
af.duration = -2;
af.level = ch->level;
af.bitvector = 0;
af.location = APPLY_STR;
af.modifier = 1 + (ch->level >= 18) + (ch->level >= 30) + (ch->level >= 45);
affect_to_char(ch, &af);
}
}
void remove_prog_girdle_giant(OBJ_DATA *obj, CHAR_DATA *ch)
{
if (is_affected(ch, gsn_giant_strength))
{
affect_strip(ch, gsn_giant_strength);
send_to_char("Your muscles regain its original value.\n\r", ch);
}
}
void wear_prog_breastplate_strength(OBJ_DATA *obj, CHAR_DATA *ch)
{
AFFECT_DATA af;
if (!is_affected(ch, gsn_giant_strength))
{
send_to_char("As you wear breastplate of strength, You feel yourself getting stronger.\n\r", ch);
send_to_char("Your muscles seems incredibly huge.\n\r", ch);
af.where = TO_AFFECTS;
af.type = gsn_giant_strength;
af.duration = -2;
af.level = ch->level;
af.bitvector = 0;
af.location = APPLY_STR;
af.modifier = 1 + (ch->level >= 18) + (ch->level >= 30) + (ch->level >= 45);
affect_to_char(ch, &af);
}
}
void remove_prog_breastplate_strength(OBJ_DATA *obj, CHAR_DATA *ch)
{
if (is_affected(ch, gsn_giant_strength))
{
affect_strip(ch, gsn_giant_strength);
send_to_char("Your muscles regain its original value.\n\r", ch);
}
}
void fight_prog_rose_shield(OBJ_DATA *obj, CHAR_DATA *ch)
{
if (!( (ch->in_room->sector_type != SECT_FIELD) ||
(ch->in_room->sector_type != SECT_FOREST) ||
(ch->in_room->sector_type != SECT_MOUNTAIN) ||
(ch->in_room->sector_type != SECT_HILLS) ) )
return;
if (get_shield_char(ch) != obj )
return;
if ( number_percent() < 90 ) return;
send_to_char("The leaves of your shield grows suddenly.\n\r",ch);
send_to_char("The leaves of shield surrounds you!.\n\r",ch->fighting);
act("$n's shield of rose grows suddenly.",ch,NULL,NULL,TO_ROOM);
obj_cast_spell(gsn_slow,ch->level,ch,ch->fighting,NULL);
return;
}
void fight_prog_lion_claw(OBJ_DATA *obj, CHAR_DATA *ch)
{
if ( number_percent() < 90 ) return;
if ( is_wielded_char(ch,obj) )
{
send_to_char("The nails of your claw appears form its fingers.\n\r",ch);
act_color("the nails of $n's claw appears for an instant.",
ch,NULL,NULL,TO_ROOM,POS_DEAD,CLR_WHITE);
one_hit(ch,ch->fighting,TYPE_HIT,FALSE);
one_hit(ch,ch->fighting,TYPE_HIT,FALSE);
one_hit(ch,ch->fighting,TYPE_HIT,FALSE);
one_hit(ch,ch->fighting,TYPE_HIT,FALSE);
send_to_char("The nails of your claw disappears.\n\r",ch);
act_color("the nails of $n's claw disappears suddenly.",
ch,NULL,NULL,TO_ROOM,POS_DEAD,CLR_WHITE);
return;
}
return;
}
void speech_prog_ring_ra(OBJ_DATA *obj, CHAR_DATA *ch, char *speech)
{
if (!str_cmp(speech, "punish")
&& (ch->fighting) && is_equiped_char(ch,obj,WEAR_FINGER) )
{
send_to_char("An electrical arc sprays from the ring.\n\r",ch);
act("An electrical arc sprays from the ring.",ch,NULL,NULL,TO_ROOM);
obj_cast_spell(gsn_lightning_breath,ch->level,ch,ch->fighting,NULL);
WAIT_STATE(ch, 2 * PULSE_VIOLENCE);
}
return;
}
void wear_prog_eyed_sword(OBJ_DATA *obj, CHAR_DATA *ch)
{
act("$p's eye opens.",ch,obj,NULL,TO_CHAR);
act("$p's eye opens.",ch,obj,NULL,TO_ROOM);
if ( ch->level <= 10) obj->value[2] = 2;
else if ( ch->level > 10 && ch->level <= 20) obj->value[2] = 3;
else if ( ch->level > 20 && ch->level <= 30) obj->value[2] = 4;
else if ( ch->level > 30 && ch->level <= 40) obj->value[2] = 5;
else if ( ch->level > 40 && ch->level <= 50) obj->value[2] = 6;
else if ( ch->level > 50 && ch->level <= 60) obj->value[2] = 7;
else if ( ch->level > 60 && ch->level <= 70) obj->value[2] = 9;
else if ( ch->level > 70 && ch->level <= 80) obj->value[2] = 11;
else obj->value[2] = 12;
obj->level = ch->level;
return;
}
void wear_prog_katana_sword(OBJ_DATA *obj, CHAR_DATA *ch)
{
obj->value[2] = 2;
if ( obj->item_type == ITEM_WEAPON
&& IS_WEAPON_STAT(obj,WEAPON_KATANA)
&& strstr( obj->extra_descr->description, ch->name ) != NULL)
{
if ( ch->level <= 10) obj->value[2] = 2;
else if ( ch->level > 10 && ch->level <= 20) obj->value[2] = 3;
else if ( ch->level > 20 && ch->level <= 30) obj->value[2] = 4;
else if ( ch->level > 30 && ch->level <= 40) obj->value[2] = 5;
else if ( ch->level > 40 && ch->level <= 50) obj->value[2] = 6;
else if ( ch->level > 50 && ch->level <= 60) obj->value[2] = 7;
else if ( ch->level > 60 && ch->level <= 70) obj->value[2] = 9;
else if ( ch->level > 70 && ch->level <= 80) obj->value[2] = 11;
else obj->value[2] = 12;
obj->level = ch->level;
send_to_char("You feel your katana like a part of you!\n\r",ch);
}
return;
}
void fight_prog_tattoo_goktengri(OBJ_DATA *obj, CHAR_DATA *ch)
{
if (get_eq_char(ch, WEAR_TATTOO) == obj)
switch(number_bits(4)) {
case 0:
case 1:
act_color("$CThe tattoo on your shoulder glows white.$c",
ch,NULL,NULL,TO_CHAR,POS_DEAD,CLR_WHITE);
do_say(ch,"My honour is my life.");
one_hit(ch,ch->fighting,TYPE_UNDEFINED,FALSE);
break;
}
}
void wear_prog_snake(OBJ_DATA *obj, CHAR_DATA *ch)
{
act_color("$CSnakes of whip starts to breath a poisonous air.$c",
ch,obj,NULL,TO_CHAR,POS_DEAD,CLR_GREEN);
act_color("$CSnakes of whip starts to breath a poisonous air.$c",
ch,obj,NULL,TO_ROOM,POS_DEAD,CLR_GREEN);
if ( ch->level > 20 && ch->level <= 30) obj->value[2] = 4;
else if ( ch->level > 30 && ch->level <= 40) obj->value[2] = 5;
else if ( ch->level > 40 && ch->level <= 50) obj->value[2] = 6;
else if ( ch->level > 50 && ch->level <= 60) obj->value[2] = 7;
else if ( ch->level > 60 && ch->level <= 70) obj->value[2] = 9;
else if ( ch->level > 70 && ch->level <= 80) obj->value[2] = 11;
else obj->value[2] = 12;
return;
}
void remove_prog_snake(OBJ_DATA *obj, CHAR_DATA *ch)
{
act_color("$CSnakes of whip slowly melds to non-living skin.$c",
ch,obj,NULL,TO_CHAR,POS_DEAD,CLR_RED);
act_color("$CSnakes of whip slowy melds to non-living skin.$c",
ch,obj,NULL,TO_ROOM,POS_DEAD,CLR_RED);
}
void get_prog_snake(OBJ_DATA *obj, CHAR_DATA *ch)
{
act("You feel as if snakes of whip moved.",ch,obj,NULL,TO_CHAR);
}
void wear_prog_fire_shield(OBJ_DATA *obj, CHAR_DATA *ch)
{
AFFECT_DATA af;
if ( strstr( obj->extra_descr->description, "cold" ) != NULL )
{
if (!is_affected(ch, gsn_fire_shield))
{
send_to_char("As you wear shield, you become resistive to cold.\n\r", ch);
af.where = TO_RESIST;
af.type = gsn_fire_shield;
af.duration = -2;
af.level = ch->level;
af.bitvector = RES_COLD;
af.location = 0;
af.modifier = 0;
affect_to_char(ch, &af);
}
}
else
{
if (!is_affected(ch, gsn_fire_shield))
{
send_to_char("As you wear shield, you become resistive to fire.\n\r", ch);
af.where = TO_RESIST;
af.type = gsn_fire_shield;
af.duration = -2;
af.level = ch->level;
af.bitvector = RES_FIRE;
af.location = 0;
af.modifier = 0;
affect_to_char(ch, &af);
}
}
}
void remove_prog_fire_shield(OBJ_DATA *obj, CHAR_DATA *ch)
{
if (is_affected(ch, gsn_fire_shield))
{
affect_strip(ch, gsn_fire_shield);
if ( strstr( obj->extra_descr->description, "cold" ) != NULL )
send_to_char("You have become normal to cold attacks.\n\r", ch);
else send_to_char("You have become normal to fire attacks.\n\r", ch);
}
}
void wear_prog_quest_weapon(OBJ_DATA *obj, CHAR_DATA *ch)
{
if ( strstr( obj->short_descr, ch->name ) != NULL )
{
send_ch_color("$CYour weapon starts glowing.$c",ch,POS_SLEEPING,CLR_BLUE);
if ( ch->level > 20 && ch->level <= 30) obj->value[2] = 4;
else if ( ch->level > 30 && ch->level <= 40) obj->value[2] = 5;
else if ( ch->level > 40 && ch->level <= 50) obj->value[2] = 6;
else if ( ch->level > 50 && ch->level <= 60) obj->value[2] = 7;
else if ( ch->level > 60 && ch->level <= 70) obj->value[2] = 9;
else if ( ch->level > 70 && ch->level <= 80) obj->value[2] = 11;
else obj->value[2] = 12;
obj->level = ch->level;
return;
}
act( "You are zapped by $p and drop it.", ch, obj, NULL, TO_CHAR );
obj_from_char( obj );
obj_to_room( obj, ch->in_room );
return;
}
void get_prog_quest_reward(OBJ_DATA *obj, CHAR_DATA *ch)
{
if ( strstr( obj->short_descr, ch->name ) != NULL )
{
act_color("$CYour $p starts glowing.\n\r$c",
ch,obj,NULL,TO_CHAR,POS_SLEEPING,CLR_BLUE);
return;
}
act( "You are zapped by $p and drop it.", ch, obj, NULL, TO_CHAR );
obj_from_char( obj );
obj_to_room( obj, ch->in_room );
return;
}
void fight_prog_ancient_gloves( OBJ_DATA *obj, CHAR_DATA *ch )
{
int dam;
if ( get_eq_char(ch, WEAR_HANDS) != obj
|| get_wield_char(ch, FALSE) != NULL)
return;
if (number_percent() < 20)
{
dam = number_percent() + dice(ch->level, 14);
act( "As you touch $N, the flame within your hands blows UP on $N!",
ch, NULL, ch->fighting,TO_CHAR);
act( "As $n touches $N, the flame within $s hands blows UP on $N!",
ch, NULL, ch->fighting,TO_NOTVICT);
act( "As $N touches you, the flame within $S hands blows UP on YOU!"
, ch->fighting, NULL,ch,TO_CHAR);
fire_effect( ch->fighting, obj->level,dam, TARGET_CHAR );
damage( ch, ch->fighting, dam, gsn_burning_hands, DAM_FIRE, TRUE);
}
return;
}
void remove_prog_ancient_gloves(OBJ_DATA *obj, CHAR_DATA *ch)
{
send_to_char("The flame within your hands disappears.\n\r", ch );
return;
}
void wear_prog_ancient_gloves(OBJ_DATA *obj, CHAR_DATA *ch)
{
send_to_char( "A flame starts to burn within your hands!\n\r", ch );
return;
}
void fight_prog_ancient_shield(OBJ_DATA *obj, CHAR_DATA *ch)
{
int chance;
int dam;
if ( get_shield_char( ch ) != obj )
return;
if ( (chance = number_percent()) < 5)
{
dam = dice(ch->level, 20);
act("Your shield SHIMMERS brightly!", ch, NULL,ch->fighting,TO_CHAR);
act("$n's shield SHIMMERS brightly!", ch, NULL,ch->fighting,TO_VICT);
act("$n's shield SHIMMERS brightly!", ch, NULL,ch->fighting,TO_NOTVICT);
fire_effect( ch->fighting, obj->level/2, dam, TARGET_CHAR );
damage( ch, ch->fighting, dam, gsn_fire_breath, DAM_FIRE, TRUE);
}
else if ( chance < 10 )
{
act("Your shield shines with a bright red aura!",
ch, NULL,ch->fighting,TO_CHAR);
act("$n's shield shine with a bright red aura!",
ch, NULL,ch->fighting,TO_VICT);
act("$n's shield shines with a bright red aura!",
ch, NULL,ch->fighting,TO_NOTVICT);
obj_cast_spell(gsn_blindness, ch->level+ 5, ch, ch->fighting,obj);
obj_cast_spell(gsn_slow, ch->level + 5, ch, ch->fighting, obj);
}
return;
}
void remove_prog_ancient_shield(OBJ_DATA *obj, CHAR_DATA *ch)
{
act_color("$CYour shield returns to its original form.$c",
ch,obj,NULL,TO_CHAR,POS_DEAD,CLR_RED);
act_color("$CYour shield returns to its original form.$c",
ch,obj,NULL,TO_ROOM,POS_DEAD,CLR_RED);
return;
}
void wear_prog_ancient_shield(OBJ_DATA *obj, CHAR_DATA *ch)
{
act_color(
"$CYour shield changes its shape and surrounds itself with dragon skin.\n\r"
"A dragon head gets born on the upper surface of the shield and opens its mouth!$c",
ch,obj,NULL,TO_CHAR,POS_DEAD,CLR_RED);
act_color(
"$C$n's shield changes its shape and surrounds itself with dragon skin.\n\r"
"A dragon head gets born on the upper surface of the shield and opens its mouth!$c",
ch,obj,NULL,TO_ROOM,POS_DEAD,CLR_RED);
return;
}
void wear_prog_neckguard(OBJ_DATA *obj, CHAR_DATA *ch)
{
AFFECT_DATA af;
if (!is_affected(ch, gsn_neckguard))
{
af.where = TO_AFFECTS;
af.type = gsn_neckguard;
af.duration = -2;
af.level = ch->level;
af.bitvector = 0;
af.location = APPLY_NONE;
af.modifier = 0;
affect_to_char(ch, &af);
}
}
void remove_prog_neckguard(OBJ_DATA *obj, CHAR_DATA *ch)
{
if (is_affected(ch, gsn_neckguard))
affect_strip(ch, gsn_neckguard);
}
void wear_prog_headguard(OBJ_DATA *obj, CHAR_DATA *ch)
{
AFFECT_DATA af;
if (!is_affected(ch, gsn_headguard))
{
af.where = TO_AFFECTS;
af.type = gsn_headguard;
af.duration = -2;
af.level = ch->level;
af.bitvector = 0;
af.location = APPLY_NONE;
af.modifier = 0;
affect_to_char(ch, &af);
}
}
void remove_prog_headguard(OBJ_DATA *obj, CHAR_DATA *ch)
{
if (is_affected(ch, gsn_headguard))
affect_strip(ch, gsn_headguard);
}
void wear_prog_blackguard(OBJ_DATA *obj, CHAR_DATA *ch)
{
AFFECT_DATA af;
if (!is_affected(ch, gsn_blackguard))
{
af.where = TO_AFFECTS;
af.type = gsn_blackguard;
af.duration = -2;
af.level = ch->level;
af.bitvector = 0;
af.location = APPLY_NONE;
af.modifier = 0;
affect_to_char(ch, &af);
}
}
void remove_prog_blackguard(OBJ_DATA *obj, CHAR_DATA *ch)
{
if (is_affected(ch, gsn_blackguard))
affect_strip(ch, gsn_blackguard);
}