Crossfire Server, Trunk  1.75.0
artifact.cpp File Reference
#include "global.h"
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include "loader.h"
+ Include dependency graph for artifact.cpp:

Go to the source code of this file.

Macros

#define ARTIFACT_TRIES   2
 Give 1 re-roll attempt per artifact. More...
 
#define KEY_ANIMATION_SUFFIX   "animation_suffix"
 
#define KEY_FACE_SUFFIX   "face_suffix"
 

Functions

void add_abilities (object *op, const object *change)
 Apply artifact properties to an object. More...
 
void artifact_compute_chance_for_item (const object *op, const artifact *art, int *numerator, int *denominator)
 Compute the chance for a specified item to become the specified artifact. More...
 
uint16_t artifact_get_face (const artifact *art)
 Get a suitable face number for representing an artifact. More...
 
static void compute_face_name (char *buf, size_t size, const char *name, const char *suffix)
 Compute the name of a face with a suffix, taking into account names like '.123' or '.1xx'. More...
 
void dump_artifacts (void)
 For debugging purposes. More...
 
const artifactfind_artifact (const object *op, const char *name)
 Searches and returns a specific artifact compatible with an object, NULL if not found. More...
 
artifactlistfind_artifactlist (int type)
 Finds the artifact list for a certain item type. More...
 
void free_all_artifacts (void)
 Free all artifact-related information. More...
 
static void free_artifact (artifact *at)
 Totally frees an artifact, its next items, and such. More...
 
static void free_artifactlist (artifactlist *al)
 Free specified list and its items. More...
 
void generate_artifact (object *op, int difficulty)
 Decides randomly which artifact the object should be turned into. More...
 
artifactget_empty_artifact (void)
 Allocate and return the pointer to an empty artifact structure. More...
 
artifactlistget_empty_artifactlist (void)
 Allocate and return the pointer to an empty artifactlist structure. More...
 
void give_artifact_abilities (object *op, const object *artifact)
 Fixes the given object, giving it the abilities and titles it should have due to the second artifact-template. More...
 
int legal_artifact_combination (const object *op, const artifact *art)
 Checks if op can be combined with art. More...
 

Detailed Description

Everything concerning artifacts.

See also
page_treasure_list

Definition in file artifact.cpp.

Macro Definition Documentation

◆ ARTIFACT_TRIES

#define ARTIFACT_TRIES   2

Give 1 re-roll attempt per artifact.

Definition at line 123 of file artifact.cpp.

◆ KEY_ANIMATION_SUFFIX

#define KEY_ANIMATION_SUFFIX   "animation_suffix"

Definition at line 312 of file artifact.cpp.

◆ KEY_FACE_SUFFIX

#define KEY_FACE_SUFFIX   "face_suffix"

Definition at line 311 of file artifact.cpp.

Function Documentation

◆ add_abilities()

void add_abilities ( object op,
const object change 
)

Apply artifact properties to an object.

Parameters
opobject to apply changes to.
changechanges to apply, with fields handled as described in the artifacts file.

For items that do not need identifying, use their identified face/animation immediately. This should make seas of generated creatures look more interesting.

Neila Hawkins 2018-01-07

Add query flags to perform the same treatment for identified items or artifacts that come identified. Also make sure we have op->arch. Otherwise it segfaults when we don't.

2018-01-08

Definition at line 320 of file artifact.cpp.

References living::ac, add_refcount(), object::anim_speed, object::animation, object::arch, arch_to_object(), object::attacktype, blank_face, buf, change_attr_value(), CLEAR_FLAG, compute_face_name(), living::dam, living::exp, face(), object::face, FLAG_ALIVE, FLAG_ANIMATE, FLAG_BLIND, FLAG_CLIENT_ANIM_RANDOM, FLAG_CONFUSED, FLAG_CURSED, FLAG_DAMNED, FLAG_LIFESAVE, FLAG_MAKE_INVIS, FLAG_NO_SAVE, FLAG_REFL_MISSILE, FLAG_REFL_SPELL, FLAG_REFLECTING, FLAG_SEE_IN_DARK, FLAG_STAND_STILL, FLAG_STEALTH, FLAG_XRAYS, living::food, FOR_INV_FINISH, FOR_INV_PREPARE, free_string(), object::gen_sp_armour, get_attr_value(), living::grace, living::hp, object::inv, is_identified(), object::item_power, key_value::key, KEY_ANIMATION_SUFFIX, KEY_FACE_SUFFIX, object::key_values, object::last_sp, object::level, llevDebug, LOG(), living::luck, object::magic, object::material, object::materialname, MAX_BUF, living::maxgrace, living::maxhp, living::maxsp, object::move_type, object::msg, Face::name, Animations::name, treasurelist::name, object::name, key_value::next, object::nrof, NROFATTACKS, NUM_STATS, Face::number, object_copy(), object_free_drop_inventory(), object_get_value(), object_give_identified_properties(), object_insert_in_ob(), object_new(), object_remove(), object_set_msg(), object_set_value(), object_update_speed(), object::other_arch, object::path_attuned, object::path_denied, object::path_repelled, POTION, QUERY_FLAG, object::race, object::resist, ROD, set_abs_magic(), SET_FLAG, object::slaying, living::sp, object::speed, sstring, object::stats, try_find_animation(), try_find_face(), object::type, key_value::value, object::value, living::wc, and object::weight.

Referenced by artifact_describe(), and give_artifact_abilities().

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

◆ artifact_compute_chance_for_item()

void artifact_compute_chance_for_item ( const object op,
const artifact art,
int *  numerator,
int *  denominator 
)

Compute the chance for a specified item to become the specified artifact.

This does not take into account the 10% chance of an item being made an artifact.

Parameters
opitem to consider.
artartifact to compute the chance of.
numeratorchance in denominator for the artifact to be generated.
denominatordenominator, will never be 0.

Definition at line 133 of file artifact.cpp.

References artifact::chance, find_artifactlist(), legal_artifact_combination(), list, and object::type.

+ Here is the call graph for this function:

◆ artifact_get_face()

uint16_t artifact_get_face ( const artifact art)

Get a suitable face number for representing an artifact.

Parameters
artwhat to get the face of.
Returns
face, -1 as unsigned if none could be found.

Definition at line 638 of file artifact.cpp.

References artifact::allowed, blank_face, archetype::clone, object::face, find_archetype_by_object_name(), get_next_archetype(), archetype::head, artifact::item, name, Face::number, try_find_archetype(), and object::type.

+ Here is the call graph for this function:

◆ compute_face_name()

static void compute_face_name ( char *  buf,
size_t  size,
const char *  name,
const char *  suffix 
)
static

Compute the name of a face with a suffix, taking into account names like '.123' or '.1xx'.

Parameters
bufwhere to put the resulting name.
sizelength of buf.
namebase face name.
suffixsuffix to add to the face name.

Definition at line 290 of file artifact.cpp.

References buf, name, and strlcpy().

Referenced by add_abilities().

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

◆ dump_artifacts()

void dump_artifacts ( void  )

For debugging purposes.

Dumps all tables.

Todo:
use LOG() instead of fprintf.

Definition at line 614 of file artifact.cpp.

References first_artifactlist, artifactlist::items, logfile, artifactlist::next, artifactlist::total_chance, and artifactlist::type.

Referenced by init_beforeplay().

+ Here is the caller graph for this function:

◆ find_artifact()

const artifact* find_artifact ( const object op,
const char *  name 
)

Searches and returns a specific artifact compatible with an object, NULL if not found.

Parameters
opitem to search the artifact for.
nameartifact name.
Returns
matching artifact, NULL if none matched.

Definition at line 589 of file artifact.cpp.

References find_artifactlist(), find_string(), legal_artifact_combination(), list, name, sstring, and object::type.

Referenced by add_one_item(), do_single_item(), save_object_in_sb(), and while().

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

◆ find_artifactlist()

artifactlist* find_artifactlist ( int  type)

Finds the artifact list for a certain item type.

Parameters
typeitem type to get the artifacts of.
Returns
NULL if no suitable list found.

Definition at line 574 of file artifact.cpp.

References first_artifactlist, artifactlist::next, artifactlist::type, and is_valid_types_gen::type.

Referenced by artifact_compute_chance_for_item(), artifact_msg(), cast_create_missile(), command_create(), find_artifact(), generate_artifact(), ArtifactLoader::load(), and locate_recipe_artifact().

+ Here is the caller graph for this function:

◆ free_all_artifacts()

void free_all_artifacts ( void  )

Free all artifact-related information.

Definition at line 117 of file artifact.cpp.

References first_artifactlist, and free_artifactlist().

Referenced by cleanup().

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

◆ free_artifact()

static void free_artifact ( artifact at)
static

Totally frees an artifact, its next items, and such.

Parameters
atartifact to free. Pointer is free()d too, so becomes invalid.
Note
Objects at->item are malloc()ed by init_artifacts(), so can be free()d.

Definition at line 74 of file artifact.cpp.

References artifact::allowed, free_string(), artifact::item, object::msg, object::name, object::name_pl, object::next, object_free_key_values(), and object::title.

Referenced by free_artifactlist().

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

◆ free_artifactlist()

static void free_artifactlist ( artifactlist al)
static

Free specified list and its items.

Parameters
allist to free. Pointer is free()d too, so becomes invalid.

Definition at line 102 of file artifact.cpp.

References free_artifact(), artifactlist::items, and artifactlist::next.

Referenced by free_all_artifacts().

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

◆ generate_artifact()

void generate_artifact ( object op,
int  difficulty 
)

Decides randomly which artifact the object should be turned into.

Makes sure that the item can become that artifact (means magic, difficulty, and Allowed fields properly). Then calls give_artifact_abilities in order to actually create the artifact.

Parameters
opobject to attempt to transform.
difficultylimit for artifact difficulty.
Note
if the algorithm is changed, please update artifact_compute_chance_for_item above.

Definition at line 177 of file artifact.cpp.

References ARTIFACT_TRIES, FABS, find_artifactlist(), give_artifact_abilities(), artifact::item, artifactlist::items, legal_artifact_combination(), llevDebug, llevError, LOG(), object::magic, object::name, RANDOM, artifactlist::total_chance, and object::type.

Referenced by alchemy_failure_effect(), fix_generated_item(), generate_monster_arch(), generate_monster_inv(), and place_monsters().

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

◆ get_empty_artifact()

artifact* get_empty_artifact ( void  )

Allocate and return the pointer to an empty artifact structure.

Returns
new structure blanked, never NULL.
Note
will fatal() if memory error.

Definition at line 55 of file artifact.cpp.

References artifact, fatal(), OUT_OF_MEMORY, and t.

Referenced by ArtifactLoader::load().

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

◆ get_empty_artifactlist()

artifactlist* get_empty_artifactlist ( void  )

Allocate and return the pointer to an empty artifactlist structure.

Returns
new structure blanked, never NULL.
Note
will fatal() if memory error.

Definition at line 37 of file artifact.cpp.

References fatal(), artifactlist::next, OUT_OF_MEMORY, and artifactlist::total_chance.

Referenced by ArtifactLoader::load().

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

◆ give_artifact_abilities()

void give_artifact_abilities ( object op,
const object artifact 
)

Fixes the given object, giving it the abilities and titles it should have due to the second artifact-template.

Parameters
opobject to give properties to.
artifactwhat properties to apply.

Definition at line 230 of file artifact.cpp.

References add_abilities(), add_refcount(), add_string(), object::artifact, free_string(), MAX_BUF, and object::title.

Referenced by add_one_item(), cast_create_missile(), command_create(), do_single_item(), generate_artifact(), make_item_from_recipe(), recipe_get_face(), save_object_in_sb(), and while().

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

◆ legal_artifact_combination()

int legal_artifact_combination ( const object op,
const artifact art 
)

Checks if op can be combined with art.

Parameters
opobject to test.
artartifact to test.
Returns
1 if 'op' can be 'art', 0 else.

Definition at line 252 of file artifact.cpp.

References artifact::allowed, object::arch, llevDebug, LOG(), name, object::name, and archetype::name.

Referenced by artifact_compute_chance_for_item(), do_single_item(), find_artifact(), generate_artifact(), and locate_recipe_artifact().

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