Crossfire Server  1.75.0
holy.cpp File Reference

God-related common functions. More...

#include "global.h"
#include <assert.h>
#include <stdlib.h>
#include <string.h>
#include "libproto.h"
#include "living.h"
#include "spells.h"
#include "assets.h"

Go to the source code of this file.

Macros

#define DESCRIBE_ABILITY(retbuf, variable, name)
 
#define DESCRIBE_PATH(retbuf, variable, name)
 

Functions

static void add_god_to_list (archetype *god_arch)
 Adds specified god to linked list if god, gives it an id. More...
 
int describe_god (const object *god, int what, StringBuffer *buf, size_t maxlen)
 Describe a god. More...
 
void dump_gods (void)
 Prints all gods to stderr. More...
 
const objectfind_god (const char *name)
 Returns a god's object from its name. More...
 
void free_all_god (void)
 Frees all god information. More...
 
const char * get_god_for_race (const char *race)
 Returns a string that is the name of the god that should be natively worshipped by a creature of who has race *race if we can't find a god that is appropriate, we return NULL. More...
 
const objectget_rand_god (void)
 Returns a random god. More...
 
void init_gods (void)
 This takes a look at all of the archetypes to find the objects which correspond to the GODS (type GOD) More...
 

Variables

static std::vector< object * > gods
 

Detailed Description

God-related common functions.

Definition in file holy.cpp.

Macro Definition Documentation

◆ DESCRIBE_ABILITY

#define DESCRIBE_ABILITY (   retbuf,
  variable,
  name 
)
Value:
if (variable) { \
int i, j = 0; \
strcat(retbuf, "(" name ": "); \
for (i = 0; i < NROFATTACKS; i++) \
if (variable&(1<<i)) { \
if (j) \
strcat(retbuf, ", "); \
else \
j = 1; \
strcat(retbuf, attacks[i]); \
} \
strcat(retbuf, ")"); \
}
#define NROFATTACKS
Definition: attack.h:15
const char *const attacks[NROFATTACKS]
Attack type names.
Definition: living.cpp:129

Definition at line 331 of file holy.cpp.

Referenced by dump_gods().

◆ DESCRIBE_PATH

#define DESCRIBE_PATH (   retbuf,
  variable,
  name 
)
Value:
if (variable) { \
int i, j = 0; \
strcat(retbuf, "(" name ": "); \
for (i = 0; i < NRSPELLPATHS; i++) \
if (variable&(1<<i)) { \
if (j) \
strcat(retbuf, ", "); \
else \
j = 1; \
strcat(retbuf, spellpathnames[i]); \
} \
strcat(retbuf, ")"); \
}
const char *const spellpathnames[NRSPELLPATHS]
Perhaps not the best place for this, but needs to be in some file in the common area so that standalo...
Definition: init.cpp:236
#define NRSPELLPATHS
Number of spell paths.
Definition: spells.h:40

Definition at line 346 of file holy.cpp.

Referenced by dump_gods().

Function Documentation

◆ add_god_to_list()

static void add_god_to_list ( archetype god_arch)
static

Adds specified god to linked list if god, gives it an id.

Parameters
god_archGod to add. If NULL, will log an error.

Definition at line 39 of file holy.cpp.

References archetype::clone, GOD, gods, llevDebug, llevError, LOG(), object::name, and object::type.

Referenced by init_gods().

◆ describe_god()

int describe_god ( const object god,
int  what,
StringBuffer buf,
size_t  maxlen 
)

Describe a god.

The reason we return a combination is to know what exactly was written for knowledge management.

Parameters
godwhich god to describe.
whatinformation to describe, combination of GOD_xxx flags.
bufwhere to describe, must not be NULL.
maxlenmaximum wanted length of the description, if 0 no maximum length.
Returns
information actually written, combination of GOD_xxx, based on maxlen.

Definition at line 109 of file holy.cpp.

References attacktype_desc, describe_resistance(), describe_spellpath_attenuation(), GOD_BLESSED, GOD_ENEMY, GOD_HOLYWORD, GOD_IMMUNITIES, GOD_PATHS, GOD_RESISTANCES, GOD_SACRED, HUGE_BUF, MAX_BUF, object::msg, object::name, NROFATTACKS, nstrtok(), object::path_attuned, object::path_denied, object::path_repelled, PATH_SUMMON, PATH_TURNING, object::race, object::resist, object::slaying, stringbuffer_append_printf(), stringbuffer_append_string(), stringbuffer_append_stringbuffer(), stringbuffer_finish(), stringbuffer_length(), stringbuffer_new(), strtoktolin(), and object::title.

Referenced by god_info_msg(), and knowledge_god_detail().

◆ dump_gods()

◆ find_god()

const object* find_god ( const char *  name)

Returns a god's object from its name.

Note
returned object shouldn't be modified.
Parameters
namegod's name.
Returns
pointer to god's object, NULL if doesn't match any god.

Definition at line 317 of file holy.cpp.

References gods.

Referenced by become_follower(), cast_bless(), cast_consecrate(), cast_curse(), cast_detection(), cast_smite_spell(), command_setgod(), determine_god(), hit_player(), hit_with_one_attacktype(), mood_change(), perceive_self(), pets_summon_golem(), pets_summon_object(), pray_at_altar(), and tailor_god_spell().

◆ free_all_god()

void free_all_god ( void  )

Frees all god information.

Definition at line 327 of file holy.cpp.

References gods.

Referenced by cleanup().

◆ get_god_for_race()

const char* get_god_for_race ( const char *  race)

Returns a string that is the name of the god that should be natively worshipped by a creature of who has race *race if we can't find a god that is appropriate, we return NULL.

Parameters
racerace we're getting the god of.
Returns
NULL if no matching race, else god's name.

Definition at line 90 of file holy.cpp.

References gods, and strcasecmp().

Referenced by determine_god().

◆ get_rand_god()

const object* get_rand_god ( void  )

Returns a random god.

Returns
a random god, or NULL if no god was found.

Definition at line 73 of file holy.cpp.

References gods, and RANDOM.

Referenced by determine_god(), and god_info_msg().

◆ init_gods()

void init_gods ( void  )

This takes a look at all of the archetypes to find the objects which correspond to the GODS (type GOD)

Definition at line 59 of file holy.cpp.

References add_god_to_list(), archetypes_for_each(), llevDebug, and LOG().

Referenced by generate_map(), init_beforeplay(), and main().

Variable Documentation

◆ gods

std::vector<object *> gods
static

Definition at line 31 of file holy.cpp.

Referenced by add_god_to_list(), find_god(), free_all_god(), get_god_for_race(), and get_rand_god().