dsIIr4/bin/
dsIIr4/extra/creremote/
dsIIr4/extra/wolfpaw/
dsIIr4/lib/cmds/admins/
dsIIr4/lib/cmds/common/
dsIIr4/lib/cmds/creators/include/
dsIIr4/lib/cmds/creators/include/SCCS/
dsIIr4/lib/daemon/services/
dsIIr4/lib/doc/
dsIIr4/lib/domains/Ylsrim/
dsIIr4/lib/domains/Ylsrim/adm/
dsIIr4/lib/domains/Ylsrim/armor/
dsIIr4/lib/domains/Ylsrim/broken/
dsIIr4/lib/domains/Ylsrim/fish/
dsIIr4/lib/domains/Ylsrim/meal/
dsIIr4/lib/domains/Ylsrim/npc/
dsIIr4/lib/domains/Ylsrim/virtual/
dsIIr4/lib/domains/Ylsrim/weapon/
dsIIr4/lib/domains/campus/adm/
dsIIr4/lib/domains/campus/etc/
dsIIr4/lib/domains/campus/meals/
dsIIr4/lib/domains/campus/npc/
dsIIr4/lib/domains/campus/save/
dsIIr4/lib/domains/campus/txt/
dsIIr4/lib/domains/campus/txt/ai/charles/
dsIIr4/lib/domains/campus/txt/ai/charles/bak2/
dsIIr4/lib/domains/campus/txt/ai/charles/bak2/bak1/
dsIIr4/lib/domains/campus/txt/ai/charly/
dsIIr4/lib/domains/campus/txt/ai/charly/bak/
dsIIr4/lib/domains/campus/txt/jenny/
dsIIr4/lib/domains/default/creator/
dsIIr4/lib/domains/default/doors/
dsIIr4/lib/domains/default/etc/
dsIIr4/lib/domains/default/virtual/
dsIIr4/lib/domains/default/weap/
dsIIr4/lib/domains/town/virtual/
dsIIr4/lib/lib/comp/
dsIIr4/lib/lib/lvs/
dsIIr4/lib/lib/user/
dsIIr4/lib/lib/virtual/
dsIIr4/lib/log/
dsIIr4/lib/obj/book_source/
dsIIr4/lib/obj/include/
dsIIr4/lib/realms/template/
dsIIr4/lib/realms/template/adm/
dsIIr4/lib/realms/template/area/armor/
dsIIr4/lib/realms/template/area/npc/
dsIIr4/lib/realms/template/area/obj/
dsIIr4/lib/realms/template/area/room/
dsIIr4/lib/realms/template/area/weap/
dsIIr4/lib/realms/template/bak/
dsIIr4/lib/realms/template/cmds/
dsIIr4/lib/save/
dsIIr4/lib/save/kills/o/
dsIIr4/lib/secure/cfg/classes/
dsIIr4/lib/secure/cmds/creators/include/
dsIIr4/lib/secure/cmds/players/
dsIIr4/lib/secure/cmds/players/include/
dsIIr4/lib/secure/daemon/include/
dsIIr4/lib/secure/lib/
dsIIr4/lib/secure/lib/include/
dsIIr4/lib/secure/lib/net/include/
dsIIr4/lib/secure/lib/std/
dsIIr4/lib/secure/modules/
dsIIr4/lib/secure/npc/
dsIIr4/lib/secure/obj/include/
dsIIr4/lib/secure/room/
dsIIr4/lib/secure/save/
dsIIr4/lib/secure/save/boards/
dsIIr4/lib/secure/save/players/g/
dsIIr4/lib/secure/tmp/
dsIIr4/lib/secure/verbs/creators/
dsIIr4/lib/shadows/
dsIIr4/lib/spells/
dsIIr4/lib/std/board/
dsIIr4/lib/std/lib/
dsIIr4/lib/tmp/
dsIIr4/lib/verbs/admins/include/
dsIIr4/lib/verbs/common/
dsIIr4/lib/verbs/common/include/
dsIIr4/lib/verbs/creators/include/
dsIIr4/lib/verbs/players/include/SCCS/
dsIIr4/lib/verbs/rooms/
dsIIr4/lib/verbs/rooms/include/
dsIIr4/lib/www/
dsIIr4/v22.2b14-dsouls2/
dsIIr4/v22.2b14-dsouls2/ChangeLog.old/
dsIIr4/v22.2b14-dsouls2/Win32/
dsIIr4/v22.2b14-dsouls2/compat/
dsIIr4/v22.2b14-dsouls2/compat/simuls/
dsIIr4/v22.2b14-dsouls2/include/
dsIIr4/v22.2b14-dsouls2/mudlib/
dsIIr4/v22.2b14-dsouls2/testsuite/
dsIIr4/v22.2b14-dsouls2/testsuite/clone/
dsIIr4/v22.2b14-dsouls2/testsuite/command/
dsIIr4/v22.2b14-dsouls2/testsuite/data/
dsIIr4/v22.2b14-dsouls2/testsuite/etc/
dsIIr4/v22.2b14-dsouls2/testsuite/include/
dsIIr4/v22.2b14-dsouls2/testsuite/inherit/
dsIIr4/v22.2b14-dsouls2/testsuite/inherit/master/
dsIIr4/v22.2b14-dsouls2/testsuite/log/
dsIIr4/v22.2b14-dsouls2/testsuite/single/
dsIIr4/v22.2b14-dsouls2/testsuite/single/tests/compiler/
dsIIr4/v22.2b14-dsouls2/testsuite/single/tests/efuns/
dsIIr4/v22.2b14-dsouls2/testsuite/single/tests/operators/
dsIIr4/v22.2b14-dsouls2/testsuite/u/
dsIIr4/v22.2b14-dsouls2/tmp/
dsIIr4/win32/
#include <lib.h>
#include <rooms.h>
#include <vendor_types.h>
#include <damage_types.h>
inherit LIB_GERM;
int damage1();
int damage2();
int damage3();
int damage4();
int damage5();
int DangerLevel();
object global_ob,victim,where;
string victimname;

int MakeHostile(object ob){
    object *meat = get_livings(environment(ob));
    global_ob = ob;
    meat = filter(meat, (: !(base_name($1) == base_name(global_ob)) :));
    meat = filter(meat, (: !($1->GetInvis()) :));
    foreach(object new_meat in meat){
	ob->AddEnemy(new_meat);
    }
    return 1;
}

int InfectMess(object ob){
    victim=ob;
    victimname=victim->GetName();
    if(interactive(victim)) {
	eventDestruct();
	return 1;
    }
    tell_room(environment(victim), "%^BOLD%^RED%^"+victimname+" suddenly lets out a bloodcurdling scream!%^RESET%^",({victim}) );
    tell_object(victim, "%^BOLD%^RED%^You scream as you are suddenly possessed by an uncontrollable rage!%^RESET%^");
    if(!interactive(ob)) {
	ob->SetEncounter(100);
	ob->SetMelee(1);
	if(ob->GetRace() != "human" && ob->GetRace() != "orc") MakeHostile(ob);
    }
    return 1;
}

void create(){
    germ::create();
    SetKeyName("rage virus");
    SetGermName("rage virus");
    SetId(({"rv2"}));
    SetLong("Rage Virus v2");
    SetCure(20);
    SetCommunicable(50);
    SetLifeSpan(-1);
    SetType("viral");
    SetInfect((: InfectMess :));
}

void bonuses(){
    if(victim && environment(this_object()) == victim){
	victim->AddStatBonus("intelligence", -25);
	victim->AddStatBonus("strength", 35);
	victim->AddStatBonus("charisma", -35);
	victim->AddStatBonus("durability", 35);
	victim->AddStatBonus("agility", 35);
	victim->AddStatBonus("coordination", 35);
	victim->AddStatBonus("speed", 35);
	victim->AddStatBonus("wisdom", -25);
    }
    else if(victim) {
	foreach( string stat in ({"intelligence", "strength",
	    "charisma", "durability", "agility", "coordination", "speed", "wisdom"})){
	    victim->RemoveStatBonus(stat);
	}
    }
    return;
}


void init(){
    germ::init();
    bonuses();
}

int eventDestruct(){
    this_object()->eventMove(ROOM_FURNACE);
    return ::eventDestruct();
}

int eventMove(mixed dest){
    ::eventMove(dest);
    bonuses();
}

int eventSuffer(){
    int x;
    x=random(50);
    if(x < 5) damage1();
    else if(x < 10) damage2();
    else if(x < 15) damage3();
    else if(x < 20) damage4();
    else if(x < 2) damage5();
    return 1; 
}

int DangerLevel(){
    if(victim->GetHealthPoints() < 2) return 100;
    return 1;
}

int FatigueLevel() {
    if(victim->GetStaminaPoints() < 11) return 10;
    return 11;
}

string GetAffectLong(object ob) {
    if(!ob || !living(ob)) return 0;
    return "%^BOLD%^RED%^"+ob->GetName() + " looks crazed and violently insane!%^RESET%^";
}

int damage1(){
    tell_object(victim,"%^BOLD%^RED%^You feel blinded by hatred and madness!%^RESET%^");
    tell_room(environment(victim),victimname+" looks maniacally insane and drools uncontrollably.", ({victim}) );
    victim->AddStaminaPoints(random(50)+10);
    victim->AddStatBonus("strength", 10);
    victim->AddStatBonus("durability", 10);
    victim->AddStatBonus("agility", 10);
    victim->AddStatBonus("coordination", 10);
    victim->AddStatBonus("speed", 10);
    MakeHostile(victim);
    return 1;
}

int damage2(){
    tell_object(victim,"%^BOLD%^RED%^You feel your body exploding with rage!%^RESET%^");
    tell_room(environment(victim),victimname+" is shaking with fury.", ({victim}) );
    victim->eventReceiveDamage(this_object(),DISEASE,random(50)+20,0,"torso");
    victim->AddStaminaPoints(random(50)+20);
    victim->AddStatBonus("strength", 20);
    victim->AddStatBonus("durability", 20);
    victim->AddStatBonus("agility", 20);
    victim->AddStatBonus("coordination", 20);
    victim->AddStatBonus("speed", 20);
    MakeHostile(victim);
    return 1;
}

int damage3(){
    tell_room(environment(victim),victimname+" lets out a horrific roar!", ({victim}) );
    tell_object(victim,"%^BOLD%^RED%^You let out a horrific roar as a spasm of fury rips through you!%^RESET%^");
    victim->eventReceiveDamage(this_object(),DISEASE,random(60)+30,0,"torso");
    victim->AddStaminaPoints(random(60)+30);
    victim->AddStatBonus("strength", 30);
    victim->AddStatBonus("durability", 30);
    victim->AddStatBonus("agility", 30);
    victim->AddStatBonus("coordination", 30);
    victim->AddStatBonus("speed", 30);
    MakeHostile(victim);
    return 1;
}

int damage4(){
    tell_room(environment(victim),victimname+"'s entire body vibrates madly, throwing off hot blood drops, sweat, and saliva.", ({victim}) );
    tell_object(victim,"%^BOLD%^RED%^Your entire body vibrates uncontrollably, spraying blood, sweat, and spit everywhere.%^RESET%^");
    victim->eventReceiveDamage(this_object(),DISEASE,random(70)+40,0,"torso");
    victim->AddStaminaPoints(random(70)+40);
    victim->AddStatBonus("strength", 40);
    victim->AddStatBonus("durability", 40);
    victim->AddStatBonus("agility", 40);
    victim->AddStatBonus("coordination", 40);
    victim->AddStatBonus("speed", 40);
    MakeHostile(victim);
    foreach(object bystander in get_livings(environment(victim))){
	if(random(100) > 50) this_object()->eventInfect(bystander);
    }
    return 1;
}

int damage5(){
    tell_room(environment(victim),victimname+" makes a horrible, gurgling, coughing noise and hacks up "+
      "a huge glob of phlegm.", ({victim}) );
    tell_object(victim,"You cough up a huge glob of phlegm, accidentally inhale it, and choke while coughing it "+
      "back up.");
    victim->eventReceiveDamage(this_object(),DISEASE,random(80)+50,0,"torso");
    victim->AddStatBonus("strength", 50);
    victim->AddStatBonus("durability", 50);
    victim->AddStatBonus("agility", 50);
    victim->AddStatBonus("coordination", 50);
    victim->AddStatBonus("speed", 50);
    MakeHostile(victim);
    return 1;
}


mixed CanGet(object ob) { return "Your fingers slip on your runny snot.";}
mixed CanDrop(object ob) { return "Your fingers slip on your runny snot.";}