#include #include ROOMS_H #include #include #define PLAYER_INFECTABLE 0 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) && !PLAYER_INFECTABLE) { 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%^"); 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(30); SetLifeSpan(999); SetType("viral"); SetInfect((: InfectMess :)); } void bonuses(){ if(!this_object()) return; 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(){ if(!this_object()) return; germ::init(); bonuses(); } int eventDestruct(){ this_object()->eventMove(ROOM_FURNACE); return ::eventDestruct(); } int eventMove(mixed dest){ int ret = germ::eventMove(dest); if(this_object() && environment() && !living(environment())) victim = 0; bonuses(); return ret; } int eventSuffer(object ob){ int x; if(!ob) return; 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 && victim->GetHealthPoints() < 2) return 100; return 1; } int FatigueLevel() { if(victim && 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(){ if(victim){ 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(){ if(victim){ tell_object(victim,"%^BOLD%^RED%^You feel your body exploding with rage!%^RESET%^"); tell_room(environment(victim),victimname+" is shaking with fury.", ({victim}) ); 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); victim->AddHP(-(random(50)+10)); } return 1; } int damage3(){ if(victim){ 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->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); victim->AddHP(-(random(60)+30)); } return 1; } int damage4(){ if(victim){ 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->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); victim->AddHP(-(random(70)+40)); foreach(object bystander in get_livings(environment(victim))){ if(bystander && random(100) > 50 && this_object()) eventInfect(bystander); } } return 1; } int damage5(){ if(victim){ 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."); //Fix below courtesy of Jonez victim->AddStaminaPoints(random(80)+50); victim->AddStatBonus("strength", 50); victim->AddStatBonus("durability", 50); victim->AddStatBonus("agility", 50); victim->AddStatBonus("coordination", 50); victim->AddStatBonus("speed", 50); MakeHostile(victim); victim->AddHP(-(random(80)+50)); } 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.";}