Crossfire Server, Trunk  R20513
Functions
disease.c File Reference

This file contains all the code implementing diseases, except for odds and ends in attack.c and in living.c. More...

#include "global.h"
#include <assert.h>
#include <stdlib.h>
#include <string.h>
#include "living.h"
#include "object.h"
#include "skills.h"
#include "sounds.h"
#include "spells.h"
#include "sproto.h"
Include dependency graph for disease.c:

Go to the source code of this file.

Functions

static void check_infection (object *disease)
 Searches around for more victims to infect. More...
 
void check_physically_infect (object *victim, object *hitter)
 Possibly infect due to direct physical contact i.e., AT_PHYSICAL. More...
 
int cure_disease (object *sufferer, object *caster, sstring skill)
 Do the cure disease stuff, from the spell "cure disease". More...
 
static void do_symptoms (object *disease)
 This function monitors the symptoms caused by the disease (if any), causes symptoms, and modifies existing symptoms in the case of existing diseases. More...
 
static objectfind_symptom (object *disease)
 Find a symptom for a disease in disease's env. More...
 
static void grant_immunity (object *disease)
 Grants immunity to a disease. More...
 
int infect_object (object *victim, object *disease, int force)
 Try to infect something with a disease. More...
 
static int is_susceptible_to_disease (object *victim, object *disease)
 Check if victim is susceptible to disease. More...
 
int move_disease (object *disease)
 Ticks the clock for disease: infect, aggravate symptoms, ... More...
 
void move_symptom (object *symptom)
 Make the symptom do the nasty things it does. More...
 
static void remove_symptoms (object *disease)
 Remove any symptoms of disease. More...
 

Detailed Description

This file contains all the code implementing diseases, except for odds and ends in attack.c and in living.c.

Definition in file disease.c.

Function Documentation

static void check_infection ( object disease)
static

Searches around for more victims to infect.

Parameters
diseasedisease infecting. Can be either on a map or inside another object.

Definition at line 268 of file disease.c.

References obj::env, FOR_MAP_FINISH, FOR_MAP_PREPARE, get_map_flags(), infect_object(), obj::magic, obj::map, P_IS_ALIVE, P_OUT_OF_MAP, obj::x, and obj::y.

Referenced by move_disease().

Here is the call graph for this function:

Here is the caller graph for this function:

void check_physically_infect ( object victim,
object hitter 
)

Possibly infect due to direct physical contact i.e., AT_PHYSICAL.

Parameters
victimpotential victim.
hitterwho is hitting.

Definition at line 663 of file disease.c.

References DISEASE, FOR_INV_FINISH, FOR_INV_PREPARE, and infect_object().

Referenced by hit_with_one_attacktype().

Here is the call graph for this function:

Here is the caller graph for this function:

int cure_disease ( object sufferer,
object caster,
sstring  skill 
)

Do the cure disease stuff, from the spell "cure disease".

Parameters
suffererwho is getting cured.
casterspell object used for curing. If NULL all diseases are removed, else only those of lower level than caster or randomly chosen.
skillskill to give experience to, can be NULL.
Return values
0no disease was cured.
1at least one disease was cured.

Definition at line 685 of file disease.c.

References change_exp(), DISEASE, draw_ext_info(), draw_ext_info_format(), liv::exp, FLAG_STARTEQUIP, FOR_INV_FINISH, FOR_INV_PREPARE, obj::level, MSG_TYPE_ATTRIBUTE, MSG_TYPE_ATTRIBUTE_BAD_EFFECT_END, MSG_TYPE_SPELL, MSG_TYPE_SPELL_HEAL, NDI_UNIQUE, object_free_drop_inventory(), object_remove(), PREFER_LOW, QUERY_FLAG, random_roll(), remove_symptoms(), and obj::stats.

Referenced by cast_heal(), kill_player(), and kill_player_not_permadeath().

Here is the call graph for this function:

Here is the caller graph for this function:

static void do_symptoms ( object disease)
static

This function monitors the symptoms caused by the disease (if any), causes symptoms, and modifies existing symptoms in the case of existing diseases.

Parameters
diseasedisease acting. Should be in a living object.

Definition at line 432 of file disease.c.

References liv::ac, add_refcount(), ARCH_SYMPTOM, obj::attacktype, liv::Cha, check_stat_bounds(), liv::Con, create_archetype(), liv::dam, liv::Dex, obj::env, liv::exp, FABS, find_symptom(), fix_object(), FLAG_APPLIED, FLAG_WIZ, liv::food, FREE_AND_COPY, free_string(), get_attr_value(), HEAD, liv::hp, liv::Int, is_susceptible_to_disease(), obj::last_eat, obj::last_sp, obj::level, Settings::max_stat, liv::maxgrace, liv::maxsp, obj::move_block, obj::msg, obj::name, obj::name_pl, NUM_STATS, object_find_by_type_and_name(), object_get_owner(), object_insert_in_ob(), object_set_msg(), object_set_owner(), obj::other_arch, liv::Pow, PREFER_LOW, QUERY_FLAG, random_roll(), set_attr_value(), SET_FLAG, settings, SIGN, obj::skill, liv::sp, obj::speed, obj::stats, liv::Str, obj::value, and liv::Wis.

Referenced by move_disease().

Here is the call graph for this function:

Here is the caller graph for this function:

static object * find_symptom ( object disease)
static

Find a symptom for a disease in disease's env.

Parameters
diseasedisease to search symptom of. Must be in another object.
Returns
matching symptom object, NULL if none found.

Definition at line 255 of file disease.c.

References obj::env, obj::name, object_find_by_type_and_name(), and SYMPTOM.

Referenced by do_symptoms(), and remove_symptoms().

Here is the call graph for this function:

Here is the caller graph for this function:

static void grant_immunity ( object disease)
static

Grants immunity to a disease.

Parameters
diseasedisease to grant immunity to. Must be in another object.

Definition at line 564 of file disease.c.

References add_string(), create_archetype(), obj::env, obj::last_heal, obj::level, obj::move_block, obj::name, object_find_by_type_and_name(), object_insert_in_ob(), and SIGN.

Referenced by move_disease().

Here is the call graph for this function:

Here is the caller graph for this function:

int infect_object ( object victim,
object disease,
int  force 
)

Try to infect something with a disease.

Rules:

  • objects with immunity aren't infectable.
  • objects already infected aren't infectable.
  • dead objects aren't infectable.
  • undead objects are infectible only if specifically named.
Parameters
victimpotential victim to infect.
diseasewhat could infect.
forcedon't do a random check for infection. Other checks (susceptible to disease, not immune, and so on) are still done.
Return values
0victim wasn't infected.
1victim was infected.

Definition at line 317 of file disease.c.

References add_refcount(), DISEASE, draw_ext_info(), obj::env, FLAG_MONSTER, liv::food, free_string(), HEAD, is_susceptible_to_disease(), obj::last_grace, obj::level, obj::map, liv::maxgrace, liv::maxhp, obj::move_block, MSG_TYPE_ATTACK, MSG_TYPE_ATTACK_DID_HIT, MSG_TYPE_ATTRIBUTE, MSG_TYPE_ATTRIBUTE_BAD_EFFECT_START, obj::name, NDI_RED, NDI_UNIQUE, object_copy(), object_find_by_type_and_name(), object_get_owner(), object_insert_in_ob(), object_new(), object_set_owner(), op_on_battleground(), PLAYER, PREFER_HIGH, QUERY_FLAG, random_roll(), SIGN, obj::skill, snprintf, obj::stats, obj::title, obj::type, obj::value, and liv::wc.

Referenced by cast_cause_disease(), check_infection(), check_physically_infect(), and rune_attack().

Here is the call graph for this function:

Here is the caller graph for this function:

static int is_susceptible_to_disease ( object victim,
object disease 
)
static

Check if victim is susceptible to disease.

Does not check for immunity.

Parameters
victimpotential victim.
diseasedisease to check.
Return values
1victim can be infected
0victim doesn't care for the disease.

Definition at line 153 of file disease.c.

References FLAG_ALIVE, FLAG_UNDEAD, FLAG_WIZ, obj::name, QUERY_FLAG, obj::race, and undead_name.

Referenced by do_symptoms(), infect_object(), and move_disease().

Here is the caller graph for this function:

int move_disease ( object disease)

Ticks the clock for disease: infect, aggravate symptoms, ...

Parameters
diseasedisease to move. Can be removed during processing.
Return values
1if disease was removed.
0disease just moved.

Definition at line 180 of file disease.c.

References check_infection(), do_symptoms(), obj::env, FLAG_WIZ, liv::food, grant_immunity(), is_susceptible_to_disease(), liv::maxhp, object_free_drop_inventory(), object_remove(), QUERY_FLAG, remove_symptoms(), obj::stats, and obj::value.

Referenced by legacy_ob_process().

Here is the call graph for this function:

Here is the caller graph for this function:

void move_symptom ( object symptom)
static void remove_symptoms ( object disease)
static

Remove any symptoms of disease.

Modified by MSW 2003-03-28 do try to find all the symptom the player may have - I think through some odd interactoins with disease level and player level and whatnot, a player could get more than one symtpom to a disease.

Parameters
diseasedisease to remove. Must be in a living object.

Definition at line 232 of file disease.c.

References obj::env, find_symptom(), fix_object(), object_free_drop_inventory(), and object_remove().

Referenced by cure_disease(), and move_disease().

Here is the call graph for this function:

Here is the caller graph for this function: