Crossfire Server, Trunk
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
 
#define KEY_ANIMATION_SUFFIX   "animation_suffix"
 
#define KEY_FACE_SUFFIX   "face_suffix"
 

Functions

void add_abilities (object *op, const object *change)
 
void artifact_compute_chance_for_item (const object *op, const artifact *art, int *numerator, int *denominator)
 
uint16_t artifact_get_face (const artifact *art)
 
static void compute_face_name (char *buf, size_t size, const char *name, const char *suffix)
 
void dump_artifacts (void)
 
const artifactfind_artifact (const object *op, const char *name)
 
artifactlistfind_artifactlist (int type)
 
void free_all_artifacts (void)
 
static void free_artifact (artifact *at)
 
static void free_artifactlist (artifactlist *al)
 
void generate_artifact (object *op, int difficulty)
 
artifactget_empty_artifact (void)
 
artifactlistget_empty_artifactlist (void)
 
void give_artifact_abilities (object *op, const object *artifact)
 
int legal_artifact_combination (const object *op, const artifact *art)
 

Detailed Description

Everything concerning artifacts.

See also
Treasure lists

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(), animate::anim, object::anim_speed, object::animation, arch_to_object(), object::attacktype, blank_face, buf, change_attr_value(), CLEAR_FLAG, compute_face_name(), living::dam, living::exp, object::face, FLAG_ALIVE, FLAG_ANIMATE, FLAG_BLIND, FLAG_CLIENT_ANIM_RANDOM, FLAG_CONFUSED, FLAG_CURSED, FLAG_DAMNED, FLAG_IDENTIFIED, 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, make_face_from_files::int, commongive::inv, object::inv, is_identified(), object::item_power, key_value::key, castle_read::key, KEY_ANIMATION_SUFFIX, KEY_FACE_SUFFIX, object::key_values, object::last_sp, object::level, llevDebug, LOG(), living::luck, object::material, object::materialname, MAX_BUF, living::maxgrace, living::maxhp, living::maxsp, object::move_type, object::msg, Face::name, Animations::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(), give::op, 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, sstring, object::stats, Ice::tmp, try_find_animation(), try_find_face(), key_value::value, object::value, living::wc, and object::weight.

Referenced by artifact_describe(), give_artifact_abilities(), and START_TEST().

+ 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, bigchest::check, find_artifactlist(), legal_artifact_combination(), guildoracle::list, and give::op.

Referenced by ArtifactWrapper::displayName().

+ Here is the call graph for this function:
+ Here is the caller 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, archininventory::arch, blank_face, object::face, find_archetype_by_object_name(), get_next_archetype(), artifact::item, give::name, Face::number, try_find_archetype(), and object::type.

Referenced by ArtifactWrapper::displayIcon(), and START_TEST().

+ Here is the call graph for this function:
+ Here is the caller 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, give::name, strlcpy(), and castle_read::suffix.

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(), guildoracle::list, give::name, give::op, and sstring.

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(), ArtifactWrapper::displayName(), find_artifact(), generate_artifact(), ArtifactLoader::load(), locate_recipe_artifact(), and AssetWithArtifacts< archetype >::updateArtifacts().

+ 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, give::next, 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, give::op, ring_occidental_mages::r, RANDOM, and artifactlist::total_chance.

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

+ 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 fatal(), OUT_OF_MEMORY, and Floor::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(), free_string(), MAX_BUF, and give::op.

Referenced by add_one_item(), ArtifactPanel::artifactChanged(), 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, llevDebug, LOG(), give::name, give::op, and Ice::tmp.

Referenced by artifact_compute_chance_for_item(), ArtifactPanel::computeMadeViaAlchemy(), do_single_item(), find_artifact(), generate_artifact(), locate_recipe_artifact(), and AssetWithArtifacts< archetype >::updateArtifacts().

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