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

Go to the source code of this file.

Functions

objectarch_to_object (archetype *at)
 
objectcreate_archetype (const char *name)
 
objectcreate_archetype_by_object_name (const char *name)
 
objectcreate_singularity (const char *name)
 
void dump_all_archetypes (void)
 
void dump_arch (archetype *at, StringBuffer *sb)
 
archetypefind_archetype_by_object_name (const char *name)
 
archetypefind_archetype_by_object_type_name (int type, const char *name)
 
void free_arch (archetype *at)
 
archetypeget_archetype_by_skill_name (const char *skill, int type)
 
archetypeget_archetype_by_type_subtype (int type, int subtype)
 
archetypeget_archetype_struct (void)
 
objectobject_create_arch (archetype *at)
 

Detailed Description

All archetype-related functions.

Note
The naming of these functions is really poor - they are all pretty much named '.._arch_...', but they may more may not return archetypes. Some make the arch_to_object call, and thus return an object. Perhaps those should be called 'archob' functions to denote they return an object derived from the archetype. MSW 2003-04-29
Todo:
make the functions use the same order for parameters (type first, then name, or the opposite).

Definition in file arch.cpp.

Function Documentation

◆ arch_to_object()

object* arch_to_object ( archetype at)

Creates and returns a new object which is a copy of the given archetype. This function returns NULL if given a NULL pointer, else an object.

Parameters
atarchetype from which to get an object.
Returns
object of specified type.
Note
object_new() will either allocate memory or call fatal(), so returned value is never NULL.

Definition at line 229 of file arch.cpp.

References archetype::clone, llevError, LOG(), object_copy_with_inv(), object_new(), and give::op.

Referenced by add_abilities(), add_one_item(), animate_bomb(), animate_weapon(), apply_builder_floor(), apply_builder_window(), ArtifactPanel::artifactChanged(), cast_bless(), cast_cause_disease(), cast_change_ability(), cast_cone(), cast_consecrate(), cast_curse(), cast_destruction(), cast_detection(), cast_heal(), cast_light(), cast_polymorph(), cast_raise_dead_spell(), cast_smite_spell(), change_luck(), change_object(), command_create(), cone_drop(), create_archetype(), create_archetype_by_object_name(), create_aura(), create_bomb(), create_player_cmd(), do_single_item(), do_test(), do_turn(), dragon_ability_gain(), drain_specific_stat(), eat_special_food(), explode_bullet(), fire_arch_from_position(), fire_bolt(), fire_swarm(), fix_container_multipart(), fix_summon_pet(), fix_walls(), get_npc(), get_player(), get_spell_by_name(), give_skill_by_name(), god_gives_present(), kill_player(), kill_player_not_permadeath(), kill_player_permadeath(), magic_wall(), make_map_floor(), make_map_walls(), mood_change(), move_aura(), move_ball_spell(), move_symptom(), object_create_arch(), object_fix_multipart(), object_replace_insert_in_map(), pets_summon_object(), pick_joined_wall(), place_exits(), poison_living(), potion_type_apply(), print_monsters(), put_a_monster(), put_decor(), put_doors(), put_floor(), put_in_icecube(), recipe_get_face(), remove_door(), remove_locked_door(), retrofit_joined_wall(), save_object_in_sb(), slow_living_by(), spell_effect(), spring_trap(), START_TEST(), town_portal_find_force(), write_mark(), and write_rune().

+ Here is the call graph for this function:

◆ create_archetype()

object* create_archetype ( const char *  name)

Finds which archetype matches the given name, and returns a new object containing a copy of the archetype.

Parameters
namearchetype name
Returns
object of specified archetype, or a singularity. Will never be NULL.
Todo:
replace with object_create_arch() which is multi-part aware.

Definition at line 278 of file arch.cpp.

References arch_to_object(), create_singularity(), give::name, and try_find_archetype().

Referenced by add_force(), alchemy_failure_effect(), apply_handle_yield(), become_follower(), blind_living(), cast_bless(), cast_cause_disease(), cast_change_ability(), cast_create_missile(), cast_create_town_portal(), cast_curse(), cast_spell(), cast_word_of_recall(), change_book(), charge_mana_effect(), command_use(), confuse_living(), converter_type_move_on(), create_aura(), do_artifact(), do_item_conversion(), do_magic(), do_symptoms(), do_test(), eat_special_food(), examine_monster(), find_or_create_connection_for_map(), find_transmution_ob(), fire_swarm(), fix_generated_item(), get_npc(), god_examines_priest(), god_intervention(), grant_immunity(), keyplace(), kill_player_not_permadeath(), local_check_loaded_object(), locate_recipe_artifact(), lock_and_hide_doors(), make_object_glow(), object_handle_death_animation(), CREMainWindow::onReportSpellDamage(), place_alchemy_objects(), place_chest(), place_exits(), potion_type_apply(), pray_at_altar(), prayer_failure(), put_a_monster(), recharge(), save_throw_object(), scroll_failure(), setup(), spell_failure(), START_TEST(), surround_by_doors(), swap_random_stats(), town_portal_destroy_existing(), transmute_item_to_flower(), trap_show(), and write_rune().

+ Here is the call graph for this function:

◆ create_archetype_by_object_name()

object* create_archetype_by_object_name ( const char *  name)

Creates an object given the name that appears during the game (for example, "writing pen" instead of "stylus").

Parameters
namethe name we're searching for (ex: "writing pen"), must not be null
Returns
a corresponding object if found; a singularity object if not found.
Note
Note by MSW - it appears that it takes the full name and keeps shortening it until it finds a match. I re-wrote this so that it doesn't malloc it each time - not that this function is used much, but it otherwise had a big memory leak.

Definition at line 116 of file arch.cpp.

References arch_to_object(), AssetsManager::archetypes(), create_singularity(), Archetypes::findByObjectName(), getManager(), MAX_BUF, and give::name.

Referenced by check_loaded_object(), god_intervention(), local_check_loaded_object(), and START_TEST().

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

◆ create_singularity()

object* create_singularity ( const char *  name)

Creates a dummy object. This function is called by get_archetype() if it fails to find the appropriate archetype. Thus get_archetype() will be guaranteed to always return an object, and never NULL.

Parameters
namename to give the dummy object.
Returns
object of specified name. It fill have the FLAG_NO_PICK flag set.
Note
object_new() will either allocate memory or call fatal(), so returned value is never NULL.

Definition at line 255 of file arch.cpp.

References add_string(), ARCH_SINGULARITY, buf, empty_archetype, FLAG_NO_PICK, MAX_BUF, give::name, object_new(), give::op, and SET_FLAG.

Referenced by create_archetype(), create_archetype_by_object_name(), and START_TEST().

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

◆ dump_all_archetypes()

void dump_all_archetypes ( void  )

Dumps all archetypes to debug-level output. If you run crossfire with debug, and enter DM-mode, you can trigger this with the "dumpallarchetypes" command.

Definition at line 150 of file arch.cpp.

References archininventory::arch, AssetsManager::archetypes(), dump_arch(), AssetsCollection< T, Key >::each(), getManager(), llevDebug, LOG(), stringbuffer_finish(), and stringbuffer_new().

Referenced by command_dumpallarchetypes().

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

◆ dump_arch()

void dump_arch ( archetype at,
StringBuffer sb 
)

Dumps an archetype to buffer.

Parameters
atarchetype to dump. Must not be NULL.
sbbuffer that will contain dumped information.

Definition at line 141 of file arch.cpp.

References archetype::clone, and object_dump().

Referenced by dump_all_archetypes().

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

◆ find_archetype_by_object_name()

archetype* find_archetype_by_object_name ( const char *  name)

This function retrieves an archetype given the name that appears during the game (for example, "writing pen" instead of "stylus"). It does not use the hashtable system, but browse the whole archlist each time. I suggest not to use it unless you really need it because of performance issue. It is currently used by scripting extensions (create-object). Params:

Parameters
namethe name we're searching for (ex: "writing pen")
Returns
the archetype found or NULL if nothing was found

Definition at line 53 of file arch.cpp.

References AssetsManager::archetypes(), Archetypes::findByObjectName(), getManager(), and give::name.

Referenced by artifact_describe(), artifact_get_face(), cfapi_object_create(), command_create(), knowledge_god_detail(), knowledge_god_validate(), and START_TEST().

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

◆ find_archetype_by_object_type_name()

archetype* find_archetype_by_object_type_name ( int  type,
const char *  name 
)

This function retrieves an archetype by type and name that appears during the game. It is basically the same as find_archetype_by_object_name() except that it considers only items of the given type.

Parameters
typeitem type we're searching
namethe name we're searching for (ex: "writing pen")

Definition at line 66 of file arch.cpp.

References AssetsManager::archetypes(), Archetypes::findByObjectTypeName(), getManager(), give::name, and is_valid_types_gen::type.

Referenced by cast_create_food(), and START_TEST().

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

◆ free_arch()

void free_arch ( archetype at)

Frees archetype.

Parameters
atarchetype to free. Pointer becomes invalid after the call.

Definition at line 169 of file arch.cpp.

References archetype::clone, free_string(), object::msg, object::name, archetype::name, object::name_pl, object_free_key_values(), object::race, object::slaying, and object::title.

Referenced by asset_destroy(), object_free(), and Archetypes::replace().

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

◆ get_archetype_by_skill_name()

archetype* get_archetype_by_skill_name ( const char *  skill,
int  type 
)

Retrieves an archetype by skill name and type. This is a lot like the other get_archetype_ functions, with different options.

Parameters
skillskill to search for. Must not be NULL.
typeitem type to search for. -1 means that it doesn't matter.
Returns
matching archetype, or NULL if none found.

Definition at line 80 of file arch.cpp.

References AssetsManager::archetypes(), Archetypes::findBySkillNameAndType(), getManager(), and is_valid_types_gen::type.

Referenced by examine_fluff(), give_skill_by_name(), and START_TEST().

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

◆ get_archetype_by_type_subtype()

archetype* get_archetype_by_type_subtype ( int  type,
int  subtype 
)

Retrieves an archetype by type and subtype. Similiar to other get_archetype_ functions. This returns the first archetype that matches both the type and subtype. type and subtype can be -1 to say ignore, but in this case, the match it does may not be very useful. This function is most useful when subtypes are known to be unique for a particular type (eg, skills)

Parameters
typeobject type to search for. -1 means any
subtypeobject subtype to search for. -1 means any
Returns
matching archetype, or NULL if none found.

Definition at line 99 of file arch.cpp.

References AssetsManager::archetypes(), Archetypes::findByTypeSubtype(), getManager(), and is_valid_types_gen::type.

Referenced by become_follower(), create_player_cmd(), init_dynamic(), START_TEST(), and write_on_item().

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

◆ get_archetype_struct()

archetype* get_archetype_struct ( void  )

Allocates, initialises and returns the pointer to an archetype structure.

Returns
new archetype structure, will never be NULL.
Note
this function will call fatal() if it can't allocate memory.

Definition at line 195 of file arch.cpp.

References archininventory::arch, CALLOC, CLEAR_FLAG, fatal(), FLAG_FREED, FLAG_REMOVED, object_clear(), OUT_OF_MEMORY, and SET_FLAG.

Referenced by asset_create(), check_loaded_object(), ArchetypeLoader::load(), local_check_loaded_object(), and START_TEST().

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

◆ object_create_arch()

object* object_create_arch ( archetype at)

Create a full object using the given archetype. This instanciate not only the archetype but also all linked archetypes in case of multisquare archetype.

Parameters
atarchetype to instanciate. Must not be NULL.
Returns
pointer to head of instance.
Note
will never return NULL.

Definition at line 298 of file arch.cpp.

References arch_to_object(), archetype::clone, object::more, archetype::more, give::op, object::x, and object::y.

Referenced by apply_map_builder(), cast_detection(), cctk_create_game_object(), cfapi_object_create(), command_create(), do_harvest(), do_item_conversion(), CRECombatSimulator::fight(), include_map_in_map(), monsterFight(), move_creator(), msgfile_msg(), place_monsters(), polymorph_living(), and START_TEST().

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