Crossfire Server, Trunk  R20513
Functions | Variables
item.c File Reference

Those functions deal with objects in general, including description, body location, and such. More...

#include "global.h"
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "living.h"
#include "spells.h"
Include dependency graph for item.c:

Go to the source code of this file.

Functions

int calc_item_power (const object *op)
 This takes an object 'op' and figures out what its item_power rating should be. More...
 
StringBufferdescribe_item (const object *op, const object *owner, int use_media_tags, StringBuffer *buf)
 Describes an item, in all its details. More...
 
StringBufferdescribe_monster (const object *op, int use_media_tags, StringBuffer *buf)
 Describes a monster. More...
 
StringBufferdescribe_resistance (const object *op, int newline, int use_media_tags, StringBuffer *buf)
 Generates the visible naming for resistances. More...
 
void get_levelnumber (int i, char *buf, size_t size)
 Formats a level. More...
 
int get_power_from_ench (int ench)
 
const typedataget_typedata (int itemtype)
 
const typedataget_typedata_by_name (const char *name)
 
objectidentify (object *op)
 Identifies an item. More...
 
int is_magical (const object *op)
 Checks whether object is magical. More...
 
int need_identify (const object *op)
 This function really should not exist - by default, any item not identified should need it. More...
 
void object_give_identified_properties (object *op)
 Ensure op has all its "identified" properties set. More...
 
void query_base_name (const object *op, int plural, char *buf, size_t size)
 Query a short name for the item. More...
 
void query_name (const object *op, char *buf, size_t size)
 Describes an item. More...
 
void query_short_name (const object *op, char *buf, size_t size)
 query_short_name(object) is similar to query_name(), but doesn't contain any information about object status (worn/cursed/etc.) More...
 
void query_weight (const object *op, char *buf, size_t size)
 Formats the item's weight. More...
 
static StringBufferring_desc (const object *op, StringBuffer *buf)
 Describes a ring or amulet, or a skill. More...
 

Variables

body_locations_struct body_locations [NUM_BODY_LOCATIONS]
 The ordering of this is actually doesn't make a difference However, for ease of use, new entries should go at the end so those people that debug the code that get used to something being in the location 4 don't get confused. More...
 
static const int enc_to_item_power []
 This curve may be too steep. More...
 
static const typedata item_types []
 The following is a large table of item types, the fields are: item number, item name, item name (plural), and two numbers that are the skills used to identify them. More...
 
static const int item_types_size = sizeof(item_types)/sizeof(*item_types)
 Number of items in item_types array. More...
 
static const char *const levelnumbers []
 Levels as a full name and not a number. More...
 
static const char *const levelnumbers_10 []
 Tens for levels. More...
 
static const char *const numbers_10 []
 Tens. More...
 

Detailed Description

Those functions deal with objects in general, including description, body location, and such.

Todo:
put const char *instead of char *when possible.

Definition in file item.c.

Function Documentation

int calc_item_power ( const object op)

This takes an object 'op' and figures out what its item_power rating should be.

This should only really be used by the treasure generation code, and when loading legacy objects. It returns the item_power it calculates.

Parameters
opobject of which to compute the item_power
Returns
op's item power.

Definition at line 246 of file item.c.

References AMULET, ARMOUR, obj::attacktype, BOOTS, BRACERS, CLOAK, liv::exp, FLAG_LIFESAVE, FLAG_MAKE_INVIS, FLAG_REFL_MISSILE, FLAG_REFL_SPELL, FLAG_SEE_IN_DARK, FLAG_STEALTH, FLAG_XRAYS, liv::food, get_attr_value(), get_power_from_ench(), GIRDLE, GLOVES, liv::grace, HELMET, liv::hp, liv::luck, obj::magic, NROFATTACKS, NRSPELLPATHS, NUM_STATS, obj::path_attuned, obj::path_denied, obj::path_repelled, QUERY_FLAG, obj::resist, RING, SHIELD, obj::slaying, liv::sp, obj::stats, obj::type, and WEAPON.

Referenced by add_one_item(), fix_generated_item(), and local_check_loaded_object().

Here is the call graph for this function:

Here is the caller graph for this function:

StringBuffer* describe_item ( const object op,
const object owner,
int  use_media_tags,
StringBuffer buf 
)

Describes an item, in all its details.

  • If it is a monster, lots of information about its abilities will be returned.
  • If it is an item, lots of information about which abilities will be gained about its user will be returned.
  • If it is a player, it writes out the current abilities of the player, which is usually gained by the items applied.

It would be really handy to actually pass another object pointer on who is examining this object. Then, you could reveal certain information depending on what the examiner knows, eg, wouldn't need to use the SEE_INVISIBLE flag to know it is a dragon player examining food. Could have things like a dwarven axe, in which the full abilities are only known to dwarves, etc.

Add 'owner' who is the person examining this object. owner can be null if no one is being associated with this item (eg, debug dump or the like)

Parameters
opobject to describe. Must not be NULL.
ownerplayer examining the object.
use_media_tagsif non-zero, then media tags (colors and such) are inserted in the description. This enables the player to more easily see some things.
bufbuffer that will contain the description. Can be NULL.
Returns
buf, or new StringBuffer the caller must free if buf was NULL.
Note
This function is really much more complicated than it should be, because different objects have different meanings for the same field (eg, wands use 'food' for charges). This means these special cases need to be worked out.
Todo:
Check whether owner is really needed.

Definition at line 980 of file item.c.

References liv::ac, AMULET, ARMOUR, ARMOUR_SPEED, ARMOUR_SPELLS, ARROW, atnr_is_dragon_enabled(), obj::attacktype, BOOTS, BOW, BRACERS, change_resist_msg, CLOAK, liv::dam, describe_attacktype(), describe_monster(), describe_resistance(), describe_spellpath_attenuation(), DRINK, liv::exp, FLAG_BEEN_APPLIED, FLAG_CURSED, FLAG_IDENTIFIED, FLAG_LIFESAVE, FLAG_MONSTER, FLAG_REFL_MISSILE, FLAG_REFL_SPELL, FLAG_SEE_IN_DARK, FLAG_STEALTH, FLAG_XRAYS, FLESH, FMT64, liv::food, FOOD, FORCE, get_attr_value(), GIRDLE, GLOVES, obj::glow_radius, liv::grace, HELMET, liv::hp, is_dragon_pl(), obj::item_power, LAMP, obj::last_eat, obj::level, liv::luck, obj::magic, MOVE_FLY_HIGH, MOVE_FLY_LOW, MOVE_SWIM, obj::move_type, need_identify(), NUM_STATS, obj::path_attuned, obj::path_denied, obj::path_repelled, PLAYER, QUERY_FLAG, RING, ring_desc(), ROD, SHIELD, short_stat_name, SKILL, SKILL_TOOL, obj::slaying, liv::sp, obj::stats, stringbuffer_append_printf(), stringbuffer_append_string(), stringbuffer_new(), obj::title, obj::type, WAND, liv::wc, WEAPON, and WEAPON_SPEED.

Referenced by artifact_describe(), CREArtifactPanel::artifactChanged(), cfapi_object_describe(), common_ob_describe(), dump_abilities(), knowledge_monster_detail(), mon_desc(), perceive_self(), and START_TEST().

Here is the call graph for this function:

Here is the caller graph for this function:

StringBuffer* describe_monster ( const object op,
int  use_media_tags,
StringBuffer buf 
)

Describes a monster.

Parameters
opmonster to describe. Must not be NULL, and must have FLAG_MONSTER or be a PLAYER.
use_media_tagsif non-zero, then media tags (colors and such) are inserted in the description. This enables the player to more easily see some things.
bufbuffer that will contain the description. Can be NULL.
Returns
buf, or a new StringBuffer the caller should clear if buf was NULL.
Todo:
Rename to describe_living (or equivalent) since called for player too. Fix weird sustenance logic.

Definition at line 806 of file item.c.

References obj::attacktype, archt::clone, obj::contr, describe_attacktype(), describe_resistance(), describe_spellpath_attenuation(), pl::digestion, FABS, FLAG_CAN_USE_SKILL, FLAG_CAST_SPELL, FLAG_FRIENDLY, FLAG_HITBACK, FLAG_MONSTER, FLAG_SEE_INVISIBLE, FLAG_STEALTH, FLAG_UNAGGRESSIVE, FLAG_UNDEAD, FLAG_USE_ARMOUR, FLAG_USE_BOW, FLAG_USE_RANGE, FLAG_USE_RING, FLAG_USE_SCROLL, FLAG_USE_WEAPON, pl::gen_grace, pl::gen_hp, pl::gen_sp, is_dragon_pl(), treasurestruct::item, treasureliststruct::items, liv::luck, MIN_ACTIVE_SPEED, obj::name, treasurestruct::next, object_find_by_type_and_name(), obj::path_attuned, obj::path_denied, obj::path_repelled, PLAYER, QUERY_FLAG, obj::randomitems, SKILL, obj::speed, SPELL, obj::stats, stringbuffer_append_printf(), stringbuffer_append_string(), stringbuffer_new(), and obj::type.

Referenced by describe_item(), and START_TEST().

Here is the call graph for this function:

Here is the caller graph for this function:

StringBuffer* describe_resistance ( const object op,
int  newline,
int  use_media_tags,
StringBuffer buf 
)

Generates the visible naming for resistances.

Parameters
opobject we want information about.
newlineIf TRUE, we don't put parens around the description but do put a newline at the end. Useful when dumping to files
use_media_tagsif non-zero, then media tags (colors and such) are inserted in the description. This enables the player to more easily see some things.
bufbuffer that will receive the description. Can be NULL.
Returns
buf, a new StringBuffer the caller should free if buf was NULL.

Definition at line 383 of file item.c.

References atnr_is_dragon_enabled(), FLESH, NROFATTACKS, obj::resist, resist_color, resist_plus, stringbuffer_append_printf(), stringbuffer_append_string(), stringbuffer_new(), and obj::type.

Referenced by describe_god(), describe_item(), describe_monster(), dump_gods(), and ring_desc().

Here is the call graph for this function:

Here is the caller graph for this function:

void get_levelnumber ( int  i,
char *  buf,
size_t  size 
)

Formats a level.

Parameters
ilevel to format.
[out]bufbuffer which will contain the level.
sizesize of the buffer.

Definition at line 446 of file item.c.

References levelnumbers, levelnumbers_10, numbers_10, and snprintf.

Referenced by examine(), and spellbook_type_apply().

Here is the caller graph for this function:

int get_power_from_ench ( int  ench)

Definition at line 228 of file item.c.

References enc_to_item_power.

Referenced by calc_item_power(), and fix_generated_item().

Here is the caller graph for this function:

const typedata* get_typedata ( int  itemtype)
Parameters
itemtypeitem type for which to return typedata.
Returns
typedata that has a number equal to itemtype, if there isn't one, returns NULL

Definition at line 334 of file item.c.

References item_types_size.

Referenced by cost_approx_str(), examine(), CREResourcesWindow::fillArtifacts(), parse_shop_string(), price_approx(), and skill_ident().

Here is the caller graph for this function:

const typedata* get_typedata_by_name ( const char *  name)
Parameters
nameitem name for which to return typedata. Singular form is preferred.
Returns
typedata that has a name equal to itemtype, if there isn't one, return the plural name that matches, if there still isn't one return NULL
Note
will emit an Info if found by plural form.

Definition at line 354 of file item.c.

References item_types_size, llevInfo, and LOG().

Referenced by parse_shop_string().

Here is the call graph for this function:

Here is the caller graph for this function:

object* identify ( object op)

Identifies an item.

Supposed to fix face-values as well here, but later. Note - this may merge op with other object, so this function returns either the merged object or the original if no merge happened.

Parameters
opitem to identify. Can be already identified without ill effects.
Return values
objectThe identify object - this may vary from op if the object was merged.

Definition at line 1437 of file item.c.

References add_refcount(), obj::arch, CLEAR_FLAG, archt::clone, obj::env, esrv_update_item(), FLAG_BLESSED, FLAG_CURSED, FLAG_DAMNED, FLAG_IDENTIFIED, FLAG_KNOWN_BLESSED, FLAG_KNOWN_CURSED, FLAG_KNOWN_MAGICAL, FLAG_NO_SKILL_IDENT, free_string(), GET_MAP_TOP, obj::inv, obj::map, map_find_by_type(), obj::name, obj::name_pl, object_get_player_container(), object_give_identified_properties(), object_merge(), object_update(), PLAYER, POTION, QUERY_FLAG, obj::randomitems, SET_FLAG, obj::title, obj::type, UP_OBJ_FACE, UPD_ALL, UPD_FACE, UPD_FLAGS, UPD_NAME, obj::x, and obj::y.

Referenced by apply_auto(), cast_identify(), cfapi_object_identify(), identify_altar_type_move_on(), identify_object_with_skill(), CRETreasurePanel::onGenerate(), potion_type_apply(), scroll_type_apply(), sell_item(), and spellbook_type_apply().

Here is the call graph for this function:

Here is the caller graph for this function:

int is_magical ( const object op)

Checks whether object is magical.

A magical item is one that increases/decreases any abilities, provides a resistance, has a generic magical bonus, or is an artifact.

Parameters
opitem to check.
Returns
true if the item is magical.

Definition at line 1242 of file item.c.

References liv::ac, AMULET, ARMOUR, ATNR_PHYSICAL, BOOTS, liv::dam, liv::exp, FLAG_ALIVE, FLAG_REFL_MISSILE, FLAG_REFL_SPELL, FLAG_STEALTH, FLAG_XRAYS, liv::food, get_attr_value(), GIRDLE, GLOVES, HELMET, liv::hp, liv::luck, obj::magic, obj::move_type, NROFATTACKS, NUM_STATS, POTION, POWER_CRYSTAL, QUERY_FLAG, obj::resist, RING, ROD, SCROLL, SHIELD, liv::sp, SPELLBOOK, obj::stats, obj::title, obj::type, WAND, and liv::wc.

Referenced by cast_detection(), cfapi_object_get_property(), detect_magic_on_item(), query_base_name(), and query_short_name().

Here is the call graph for this function:

Here is the caller graph for this function:

int need_identify ( const object op)

This function really should not exist - by default, any item not identified should need it.

Parameters
opitem to check.
Returns
true if the item should be identified.
Todo:
either remove this function, or fix comment above :)

Definition at line 1331 of file item.c.

References AMULET, ARMOUR, ARMOUR_IMPROVER, ARROW, BOOK, BOOTS, BOW, BRACERS, CLOAK, CLOSE_CON, CONTAINER, DRINK, FLESH, FOOD, GEM, GIRDLE, GLOVES, HELMET, INORGANIC, POISON, POTION, POWER_CRYSTAL, RING, ROD, SCROLL, SHIELD, SKILL, SKILL_TOOL, SKILLSCROLL, SPELLBOOK, obj::type, WAND, WEAPON, and WEAPON_IMPROVER.

Referenced by cast_identify(), command_create(), describe_item(), examine(), give_initial_items(), identify_altar_type_move_on(), identify_object_with_skill(), make_item_from_recipe(), query_base_name(), query_flags(), query_short_name(), and shop_price_sell().

Here is the caller graph for this function:

void object_give_identified_properties ( object op)

Ensure op has all its "identified" properties set.

Parameters
opobject to process.

Definition at line 1375 of file item.c.

References obj::anim_speed, animate_object(), obj::animation_id, CLEAR_FLAG, obj::face, obj::facing, find_face(), FLAG_ANIMATE, FLAG_CLIENT_ANIM_RANDOM, FLAG_CLIENT_ANIM_SYNC, FLAG_IS_TURNABLE, FREE_AND_COPY, obj::last_anim, obj::name, obj::name_pl, new_faces, new_face_struct::number, object_get_value(), object_set_value(), QUERY_FLAG, and SET_FLAG.

Referenced by add_one_item(), CREArtifactPanel::artifactChanged(), command_create(), identify(), knowledge_alchemy_face(), and make_item_from_recipe().

Here is the call graph for this function:

Here is the caller graph for this function:

void query_base_name ( const object op,
int  plural,
char *  buf,
size_t  size 
)

Query a short name for the item.

This is a lot like query_name(), but we don't include the item count or item status. Used for inventory sorting and sending to client. If plural is set, we generate the plural name of this.

Parameters
opitem we want the name of.
pluralwhether to get the singular or plural name
bufbuffer that will contain the object's name. Must not be NULL.
sizebuffer's length

Definition at line 722 of file item.c.

References AMULET, FLAG_BEEN_APPLIED, FLAG_IDENTIFIED, obj::inv, is_magical(), obj::level, llevError, LOG(), obj::magic, obj::name, obj::name_pl, need_identify(), obj::nrof, QUERY_FLAG, RING, ring_desc(), ROD, safe_strcat(), SCROLL, SKILL, snprintf, SPELLBOOK, stringbuffer_finish(), obj::title, obj::type, WAND, and obj::weight.

Referenced by add_object_to_socklist(), add_shop_item(), cfapi_object_get_property(), change_spell(), command_rename_item(), esrv_update_item(), fire_misc_object(), matches_sacrifice(), object_matches_string(), rangetostring(), and use_alchemy().

Here is the call graph for this function:

Here is the caller graph for this function:

void query_name ( const object op,
char *  buf,
size_t  size 
)

Describes an item.

Parameters
opitem to describe. Must not be NULL.
bufbuffer that will contain the description.
sizesize of buffer.

Definition at line 625 of file item.c.

References AMULET, ARMOUR, BOOTS, BOW, BRACERS, CLOAK, CONTAINER, obj::container, obj::env, FLAG_APPLIED, FLAG_BLESSED, FLAG_CURSED, FLAG_DAMNED, FLAG_IDENTIFIED, FLAG_INV_LOCKED, FLAG_KNOWN_BLESSED, FLAG_KNOWN_CURSED, FLAG_KNOWN_MAGICAL, FLAG_UNPAID, GIRDLE, GLOVES, HELMET, QUERY_FLAG, query_short_name(), RING, ROD, safe_strcat(), SHIELD, SKILL, obj::type, WAND, and WEAPON.

Referenced by animate_weapon(), apply_builder_item(), apply_builder_remove(), apply_by_living(), apply_check_apply_restrictions(), apply_check_race_restrictions(), apply_container(), apply_special(), apply_update_ranged_skill(), attack_hth(), attempt_jump(), attempt_steal(), blind_living(), cast_smite_spell(), cast_spell(), cfapi_object_find_archetype_inside(), cfapi_object_forget_spell(), cfapi_object_get_property(), change_spell(), command_insert_into(), command_mark(), command_remove(), common_ob_describe(), converter_type_move_on(), do_skill(), do_skill_attack(), do_throw(), drop_object(), empty_container(), exit_type_apply(), find_key(), find_player_options(), find_throw_ob(), god_examines_item(), hit_with_one_attacktype(), inventory(), kill_object(), knowledge_alchemy_detail(), leave(), legacy_ob_describe(), look_at(), make_formula_book(), mark_item_cmd(), monster_can_detect_enemy(), monster_find_throw_ob(), monster_format_say(), object_matches_string(), CREUtils::objectNode(), pick_up_object(), polymorph_melt(), power_crystal_describe(), power_crystal_type_apply(), put_object_in_sack(), recharge(), recursive_roll(), sack_can_hold(), save_life(), save_throw_object(), sell_item(), shop_pay_unpaid(), singing(), skillscroll_type_apply(), spellbook_type_apply(), transport_type_apply(), treasure_type_apply(), unapply_for_ob(), unapply_special(), use_oratory(), and write_scroll().

Here is the call graph for this function:

void query_short_name ( const object op,
char *  buf,
size_t  size 
)

query_short_name(object) is similar to query_name(), but doesn't contain any information about object status (worn/cursed/etc.)

Parameters
opobject to describe.
bufbuffer which will contain the name. Must not be NULL.
sizebuffer length.

Definition at line 547 of file item.c.

References AMULET, FLAG_BEEN_APPLIED, FLAG_IDENTIFIED, obj::inv, is_magical(), obj::level, llevError, LOG(), obj::magic, obj::name, obj::name_pl, need_identify(), obj::nrof, QUERY_FLAG, RING, ring_desc(), ROD, safe_strcat(), SCROLL, SKILL, snprintf, SPELLBOOK, stringbuffer_finish(), obj::title, obj::type, WAND, and obj::weight.

Referenced by cast_item_curse_or_curse(), cfapi_object_get_property(), command_lock_item(), dragon_ability_gain(), follower_remove_given_items(), god_gives_present(), object_matches_string(), player_attack_door(), query_name(), remove_force(), transmute_item_to_flower(), and write_note().

Here is the call graph for this function:

Here is the caller graph for this function:

void query_weight ( const object op,
char *  buf,
size_t  size 
)

Formats the item's weight.

Parameters
opobject we want the weight of.
[out]bufbuffer to write to.
sizebuffer size.

Definition at line 426 of file item.c.

References obj::carrying, obj::nrof, snprintf, and obj::weight.

Referenced by inventory().

Here is the caller graph for this function:

static StringBuffer* ring_desc ( const object op,
StringBuffer buf 
)
static

Describes a ring or amulet, or a skill.

Parameters
opitem to describe, must be RING, AMULET or SKILL.
bufbuffer that will contain the description. If NULL a new one is created.
Returns
buf, or a new StringBuffer the caller should free if buf was NULL.
Todo:
why does this also describe a SKILL?

Definition at line 472 of file item.c.

References liv::ac, AMULET, liv::dam, describe_resistance(), describe_spellpath_attenuation(), liv::exp, FLAG_IDENTIFIED, FLAG_LIFESAVE, FLAG_REFL_MISSILE, FLAG_REFL_SPELL, FLAG_STEALTH, FMT64, liv::food, get_attr_value(), obj::glow_radius, liv::grace, liv::hp, liv::luck, NUM_STATS, obj::path_attuned, obj::path_denied, obj::path_repelled, QUERY_FLAG, RING, short_stat_name, SKILL, liv::sp, obj::stats, stringbuffer_append_printf(), stringbuffer_append_string(), stringbuffer_length(), stringbuffer_new(), obj::type, and liv::wc.

Referenced by describe_item(), query_base_name(), and query_short_name().

Here is the call graph for this function:

Here is the caller graph for this function:

Variable Documentation

Initial value:
= {
{ "body_range", "in your range slot", "in a human's range slot" },
{ "body_arm", "on your arm", "on a human's arm" },
{ "body_torso", "on your body", "on a human's torso" },
{ "body_head", "on your head", "on a human's head" },
{ "body_neck", "around your neck", "around a humans neck" },
{ "body_skill", "in your skill slot", "in a human's skill slot" },
{ "body_finger", "on your finger", "on a human's finger" },
{ "body_shoulder", "around your shoulders", "around a human's shoulders" },
{ "body_foot", "on your feet", "on a human's feet" },
{ "body_hand", "on your hands", "on a human's hands" },
{ "body_wrist", "around your wrists", "around a human's wrist" },
{ "body_waist", "around your waist", "around a human's waist" },
{ "body_leg", "around your legs", "around a human's legs" },
}

The ordering of this is actually doesn't make a difference However, for ease of use, new entries should go at the end so those people that debug the code that get used to something being in the location 4 don't get confused.

The ordering in save_name, use_name, nonuse_name. save_name is the name used to load/save it from files. It should match that of the doc/Developers/objects. The only real limitation is that it shouldn't have spaces or other characters that may mess up the match code. It must also start with body_ use_name is how we describe the location if we can use it. nonuse_name is how we describe it if we can't use it. I think the values below will make it pretty clear how those work out They are basically there to make life a little easier - if a character examines an item and it says it goes on 'your arm', its pretty clear they can use it. See the last sample (commented out) for a dragon Note that using the term 'human' may not be very accurate, humanoid may be better. Basically, for the use/nonuse, the code does something like: "This item goes %s\n", with the use/nonuse values filling in the s

Definition at line 54 of file item.c.

Referenced by command_body(), examine(), and get_ob_diff().

const int enc_to_item_power[]
static
Initial value:
= {
0, 0, 1, 2, 3, 4,
5, 7, 9, 11, 13,
15, 18, 21, 24, 27,
30, 35, 40, 45, 50
}

This curve may be too steep.

But the point is that there should be tough choices - there is no real point to this if everyone can wear whatever they want with no worries. Perhaps having the steep curve is good (maybe even steeper), but allowing players to have 2 * level instead. Ideally, top level characters should only be able to use 2-3 of the most powerful items. note that this table is only really used for program generated items - custom objects can use whatever they want.

Definition at line 221 of file item.c.

Referenced by get_power_from_ench().

const typedata item_types[]
static

The following is a large table of item types, the fields are: item number, item name, item name (plural), and two numbers that are the skills used to identify them.

Anytime a new item type is added or removed, this list should be altered to reflect that. The defines for the numerical values are in define.h

Definition at line 98 of file item.c.

const int item_types_size = sizeof(item_types)/sizeof(*item_types)
static

Number of items in item_types array.

Definition at line 210 of file item.c.

Referenced by get_typedata(), and get_typedata_by_name().

const char* const levelnumbers[]
static
Initial value:
= {
"zeroth", "first", "second", "third", "fourth", "fifth", "sixth", "seventh",
"eighth", "ninth", "tenth", "eleventh", "twelfth", "thirteenth",
"fourteenth", "fifteenth", "sixteenth", "seventeenth", "eighteenth",
"nineteenth", "twentieth"
}

Levels as a full name and not a number.

Definition at line 78 of file item.c.

Referenced by get_levelnumber().

const char* const levelnumbers_10[]
static
Initial value:
= {
"zeroth", "tenth", "twentieth", "thirtieth", "fortieth", "fiftieth", "sixtieth",
"seventieth", "eightieth", "ninetieth"
}

Tens for levels.

Definition at line 86 of file item.c.

Referenced by get_levelnumber().

const char* const numbers_10[]
static
Initial value:
= {
"zero", "ten", "twenty", "thirty", "fourty", "fifty", "sixty", "seventy",
"eighty", "ninety"
}

Tens.

Definition at line 72 of file item.c.

Referenced by get_levelnumber().