Crossfire Server, Trunk  R21024
food.c File Reference
#include "global.h"
#include <math.h>
#include <stdlib.h>
#include <string.h>
#include "ob_methods.h"
#include "ob_types.h"
#include "sounds.h"
#include "sproto.h"
+ Include dependency graph for food.c:

Go to the source code of this file.

Functions

static void cursed_food_effects (object *who, object *food)
 
static int dragon_eat_flesh (object *op, object *meal)
 
static void eat_common (object *applier, object *food)
 
static void eat_special_food (object *who, object *food)
 
static method_ret food_type_apply (ob_methods *context, object *food, object *applier, int aflags)
 
void init_type_food (void)
 

Detailed Description

The implementation of the Food class of objects.

Definition in file food.c.

Function Documentation

◆ cursed_food_effects()

static void cursed_food_effects ( object who,
object food 
)
static

Definition at line 43 of file food.c.

References AT_POISON, obj::contr, draw_ext_info(), FLAG_CURSED, hit_player(), liv::hp, is_wraith_pl(), pl::killer, MSG_TYPE_APPLY, MSG_TYPE_APPLY_CURSED, MSG_TYPE_APPLY_SUCCESS, obj::name, NDI_UNIQUE, QUERY_FLAG, safe_strncpy, liv::sp, and obj::stats.

Referenced by food_type_apply().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ dragon_eat_flesh()

static int dragon_eat_flesh ( object op,
object meal 
)
static

A dragon is eating some flesh. If the flesh contains resistances, there is a chance for the dragon's skin to get improved.

Parameters
opobject (dragon player) eating the flesh.
mealflesh item, getting chewed in dragon's mouth.
Returns
1 if meal was eaten, 0 else.
Note
meal's nrof isn't decreased, caller is responsible for that.

Definition at line 253 of file food.c.

References atnr_is_dragon_enabled(), change_resist_msg, draw_ext_info(), draw_ext_info_format(), liv::exp, fix_object(), FLESH, FORCE, is_dragon_pl(), obj::last_eat, obj::level, MAX_BUF, Settings::max_level, MIN, MSG_TYPE_APPLY, MSG_TYPE_APPLY_SUCCESS, MSG_TYPE_ATTRIBUTE, MSG_TYPE_ATTRIBUTE_PROTECTION_GAIN, MSG_TYPE_ATTRIBUTE_RACE, obj::name, NDI_RED, NDI_UNIQUE, NROFATTACKS, object_find_by_type_and_arch_name(), RANDOM, obj::resist, settings, snprintf, obj::stats, and obj::type.

Referenced by food_type_apply().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ eat_common()

static void eat_common ( object applier,
object food 
)
static

Definition at line 78 of file food.c.

References draw_ext_info(), DRINK, liv::food, liv::hp, MAX_BUF, MAX_FOOD, liv::maxhp, MSG_TYPE_ATTRIBUTE, MSG_TYPE_ATTRIBUTE_BAD_EFFECT_START, obj::name, NDI_UNIQUE, slow_living_by(), snprintf, obj::stats, and obj::type.

Referenced by food_type_apply().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ eat_special_food()

static void eat_special_food ( object who,
object food 
)
static

Handles player eating food that temporarily changes status (resistances, stats). This used to call cast_change_attr(), but that doesn't work with the new spell code. Since we know what the food changes, just grab a force and use that instead.

Parameters
wholiving eating food.
foodeaten food.

Definition at line 202 of file food.c.

References change_abil(), create_archetype(), obj::duration, fix_object(), FLAG_APPLIED, FLAG_IS_USED_UP, liv::food, FORCE_NAME, get_attr_value(), MOVE_PER_SECOND, NROFATTACKS, NUM_STATS, object_free_drop_inventory(), object_insert_in_ob(), object_update_speed(), obj::resist, set_attr_value(), SET_FLAG, obj::speed, and obj::stats.

Referenced by food_type_apply().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ food_type_apply()

static method_ret food_type_apply ( ob_methods context,
object food,
object applier,
int  aflags 
)
static

Handles applying food. If player is applying, takes care of messages and dragon special food.

Parameters
contextThe method context
foodThe food to apply
applierThe object attempting to apply the food
aflagsSpecial flags (always apply/unapply)
Returns
METHOD_OK unless failure for some reason.

Definition at line 122 of file food.c.

References apply_handle_yield(), cursed_food_effects(), dragon_eat_flesh(), draw_ext_info(), draw_ext_info_format(), DRINK, eat_common(), eat_special_food(), FLAG_CAN_USE_SKILL, FLAG_CURSED, FLAG_NO_PICK, FLESH, give_skill_by_name(), liv::hp, is_dragon_pl(), is_old_wraith_pl(), is_wraith_pl(), link_player_skills(), llevError, LOG(), MAX_BUF, liv::maxhp, METHOD_OK, MSG_TYPE_APPLY, MSG_TYPE_APPLY_FAILURE, MSG_TYPE_APPLY_SUCCESS, obj::name, NDI_UNIQUE, object_decrease_nrof_by_one, PLAYER, QUERY_FLAG, SET_FLAG, snprintf, obj::stats, obj::title, and obj::type.

Referenced by init_type_food().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ init_type_food()

void init_type_food ( void  )

Initializer for the food object type.

Definition at line 37 of file food.c.

References DRINK, FLESH, FOOD, food_type_apply(), and register_apply().

Referenced by register_all_ob_types().

+ Here is the call graph for this function:
+ Here is the caller graph for this function: