User Tools

Site Tools


dev:object_fields

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
dev:object_fields [2018/04/08 14:30]
karl Add Page headline, fix internal link :users -> :user
dev:object_fields [2020/11/23 08:34] (current)
ryo [anim_suffix] update
Line 3: Line 3:
 This is the description of fields of the object structure, and what they are used to. This is the description of fields of the object structure, and what they are used to.
  
-See also [[dev:objects]] .+The struct [[object_fields_living|living]] and struct [[object_fields_key_value|key_value]] have their own pages. \\ 
 +The term [[Shared Strings]] has it's own page, too. \\ 
 +See also page [[Objects]] .
  
 +===== Issues ==
 +FIXME \\
 +**These Object Fields are for now sorted alphabetically [[:​arch:​arch_attributes:​1_index|here]] ** . \\
 +Whenever =field= gets changed, please do it in the sorted pages in the :​arch:​arch_attributes:​* namespace. ​
 +<WRAP lo>
 FIXME fill in the blanks :) add sharedstring info FIXME fill in the blanks :) add sharedstring info
  
-FIXME maybe this should ​be part of the object.h ​file directly?+FIXME make a script to either do object.h -> this page, or this page -> object.h \\ 
 +IMHO one should ​put this data into object.h, in doxygen format, and make a script to do object.h -> this page  --- //​[[user:​rednaxela|Alex Schultz]] 2007/01/03 12:50// 
 +</​WRAP>​
  
-FIXME make a script to either do object.h -> this page, or this page -> object.h +====== ​ struct obj object ​== 
-  * IMHO one should put this data into object.hin doxygen format, and make a script to do object.h -> this page  --- //​[[user:​rednaxela|Alex Schultz]] 2007/01/03 12:50//+The items in crossfire are called either Archetypes ​or Objects\\ 
 +These items can have many shapesas for player'​s inventory items, \\ 
 +monsters, NPCs, map building, climate, magics, skills, and probably more.
  
  
 +One main structure handling these Objects is <code c>
 + ​typedef struct obj { /* 160 lines of fields here */ } object; </​code>​
 + in //​[[:​server:​include:​object.h|server/​include/​object.h]]//​ .
  
 +At the top of this structure the commentary says 
 +<code c>
 +/**
 + * Main Crossfire structure, one ingame object.
 + *
 + * Note that the ordering of this structure is sort of relevant -
 + * object_copy() copies everything over beyond '​name'​ using memcpy.
 + * Thus, values that need to be copied need to be located beyond that
 + * point.
 + *
 + * However, if you're keeping a pointer of some sort, you probably
 + * don't just want it copied, so you'll need to add to common/​object.c,​
 + * e.g. copy-object
 + *
 + * I've tried to clean up this structure a bit (in terms of formatting)
 + * by making it more consistent. ​ I've also tried to locate some of the fields
 + * more logically together (put the item related ones together, the monster
 + * related ones, etc.
 + * This structure is best viewed with about a 100 width screen.
 + * MSW 2002-07-05
 + *
 + * See the @ref page_object "​documentation page" for more details.
 + */
 +</​code>​
 +and that it is better left "​unsorted"​ beyond '​name'​ . 
  
-===== List of Object fields =====+ 
 +====== Content ​of struct obj { } object ====== 
 + 
 +<code c> 
 +typedef struct obj { 
 +    /* These variables are not changed by object_copy() */ 
 +    struct pl   ​*contr; ​        /​**<​ Pointer to the player which control this object */ 
 +    struct obj  *next; ​         /**< Pointer to the next object in the free/used list */ 
 +    struct obj  *prev; ​         /**< Pointer to the previous object in the free/used list*/ 
 +    struct obj  *active_next; ​  /​**<​ Next object in the '​active'​ list 
 +                                 * This is used in process_events 
 +                                 * so that the entire object list does not 
 +                                 * need to be gone through.*/​ 
 +    struct obj  *active_prev; ​  /​**<​ Previous object in the '​active list 
 +                                 * This is used in process_events 
 +                                 * so that the entire object list does not 
 +                                 * need to be gone through. */ 
 +    struct obj  *below; ​        /​**<​ Pointer to the object stacked below this one */ 
 +    struct obj  *above; ​        /​**<​ Pointer to the object stacked above this one */ 
 +                                /* Note: stacked in the *same *environment*/​ 
 +    struct obj  *inv;           /​**<​ Pointer to the first object in the inventory */ 
 +    struct obj  *container; ​    /​**<​ Current container being used.  I think this 
 +                                 * is only used by the player right now. */ 
 +    struct obj  *env;           /​**<​ Pointer to the object which is the environment. 
 +                                 * This is typically the container that the object is in. */ 
 +    struct obj  *more; ​         /**< Pointer to the rest of a large body of objects */ 
 +    struct obj  *head; ​         /**< Points to the main object of a large body */ 
 +    struct mapdef *map;         /​**<​ Pointer to the map in which this object is present */ 
 + 
 +    tag_t       ​count; ​         /**< Unique object number for this object */ 
 +    struct struct_dialog_information *dialog_information;​ /**< Parsed dialog information for this object. 
 +                                                           * Valid if FLAG_DIALOG_PARSED is set (but can be NULL). */ 
 + 
 +    /* These get an extra add_refcount(),​ after having been copied by memcpy(). 
 +     * All fields beow this point are automatically copied by memcpy. ​ If 
 +     * adding something that needs a refcount updated, make sure you modify 
 +     * object_copy() to do so.  Everything below here also gets cleared 
 +     * by object_clear() 
 +     */ 
 +    sstring ​    ​artifact; ​      /​**<​ If set, the item is the artifact with this name and the matching type. */ 
 +    const char  *name; ​         /**< The name of the object, obviously... */ 
 +    const char  *name_pl; ​      /​**<​ The plural name of the object */ 
 +    const char  *anim_suffix; ​  /​**<​ Used to determine combined animations */ 
 +    const char  *title; ​        /​**<​ Of foo, etc */ 
 +    const char  *race; ​         /**< Human, goblin, dragon, etc */ 
 +    const char  *slaying; ​      /​**<​ Which race to do double damage to. 
 +                                 * If this is an exit, this is the filename */ 
 +    const char  *skill; ​        /​**<​ Name of the skill this object uses/grants */ 
 +    const char  *msg;           /​**<​ If this is a book/​sign/​magic mouth/etc */ 
 +    const char  *lore; ​         /**< Obscure information about this object, 
 +                                 * to get put into books and the like. */ 
 + 
 +    sint16 ​     x, y;           /​**<​ Position in the map for this object */ 
 +    sint16 ​     ox, oy;         /​**<​ For debugging: Where it was last inserted */ 
 +    float       ​speed; ​         /**< The overall speed of this object */ 
 +    float       ​speed_left; ​    /​**<​ How much speed is left to spend this round */ 
 +    float       ​weapon_speed; ​  /​**<​ The overall speed of this object */ 
 +    float       ​weapon_speed_left;​ /**< How much speed is left to spend this round */ 
 +    const New_Face ​   *face; ​   /**< Face with colors */ 
 +    uint32 ​     nrof;           /​**<​ How many of the objects */ 
 +    sint8       ​direction; ​     /**< Means the object is moving that way. */ 
 +    sint8       ​facing; ​        /​**< ​Object ​is oriented/​facing that way. */ 
 + 
 +    /* This next big block are basically used for monsters and equipment */ 
 +    uint8       ​type; ​          /​**<​ PLAYER, BULLET, etc.  See define.h */ 
 +    uint8       ​subtype; ​       /**< Subtype of object */ 
 +    uint16 ​     client_type; ​   /**< Public type information. ​ see doc/​Developers/​objects */ 
 +    sint16 ​     resist[NROFATTACKS];​ /**< Resistance adjustments for attacks */ 
 +    uint32 ​     attacktype; ​    /​**<​ Bitmask of attacks this object does */ 
 +    uint32 ​     path_attuned; ​  /​**<​ Paths the object is attuned to */ 
 +    uint32 ​     path_repelled; ​ /**< Paths the object is repelled from */ 
 +    uint32 ​     path_denied; ​   /**< Paths the object is denied access to */ 
 +    const char  *materialname; ​ /**< Specific material name */ 
 +    uint16 ​     material; ​      /​**<​ What materials this object consist of */ 
 +    sint8       ​magic; ​         /**< Any magical bonuses to this item */ 
 +    uint8       ​state; ​         /**< How the object was last drawn (animation) */ 
 +    sint32 ​     value; ​         /**< How much money it is worth (or contains) */ 
 +    sint16 ​     level; ​         /**< Level of creature or object */ 
 + 
 +    /* Note that the last_.. values are sometimes used for non obvious 
 +     * meanings by some objects, eg, sp penalty, permanent exp. 
 +     */ 
 +    sint32 ​     last_eat; ​      /​**<​ How long since we last ate */ 
 +    sint32 ​     last_heal; ​     /**< Last healed. Depends on constitution */ 
 +    sint32 ​     last_sp; ​       /**< As last_heal, but for spell points */ 
 +    sint16 ​     last_grace; ​    /​**<​ As last_sp, except for grace */ 
 +    sint16 ​     invisible; ​     /**< How much longer the object will be invis */ 
 +    uint8       ​pick_up; ​       /**< See crossfire.doc */ 
 +    sint8       ​item_power; ​    /​**<​ Power rating of the object */ 
 +    sint8       ​gen_sp_armour; ​ /**< Sp regen penalty this object has (was last_heal)*/​ 
 +    sint8       ​glow_radius; ​   /**< indicates the glow radius of the object */ 
 +    sint32 ​     weight; ​        /​**<​ Attributes of the object */ 
 +    sint32 ​     weight_limit; ​  /​**<​ Weight-limit of object */ 
 +    sint32 ​     carrying; ​      /​**<​ How much weight this object contains */ 
 +    living ​     stats; ​         /**< Str, Con, Dex, etc */ 
 +    sint64 ​     perm_exp; ​      /​**<​ Permanent exp */ 
 +    struct obj  *current_weapon;​ /**< Pointer to the weapon currently used */ 
 +    uint32 ​     weapontype; ​    /​**<​ Type of weapon */ 
 +    sint8       ​body_info[NUM_BODY_LOCATIONS]; ​ /**< Body info as loaded from the file */ 
 +    sint8       ​body_used[NUM_BODY_LOCATIONS]; ​ /**< Calculated value based on items equipped */ 
 +                                /* See the doc/​Developers/​objects for more info about body locations */ 
 + 
 +    /* Following mostly refers to fields ​only used for monsters */ 
 +    struct obj  *owner; ​        /​**<​ Pointer to the object which controls this one. 
 +                                 * Owner should not be referred to directly - 
 +                                 * object_get_owner() should be used instead. */ 
 +    tag_t       ​ownercount; ​    /​**<​ What count the owner had (in case owner has been freed) */ 
 +    struct obj  *enemy; ​        /​**<​ Monster/​player to follow even if not closest */ 
 +    struct obj  *attacked_by; ​  /​**<​ This object start to attack us! only player & monster */ 
 +    tag_t       ​attacked_by_count;​ /**< The tag of attacker, so we can be sure */ 
 +    uint16 ​     run_away; ​         /**< Monster runs away if it's hp goes below this percentage. */ 
 +    struct treasureliststruct *randomitems;​ /**< Items to be generated */ 
 +    struct obj  *chosen_skill; ​ /**< The skill chosen to use */ 
 +    uint32 ​     hide;           /​**<​ The object is hidden, not invisible */ 
 +    /* changes made by kholland@sunlab.cit.cornell.edu */ 
 +    /* allows different movement patterns for attackers */ 
 +    sint32 ​     move_status; ​   /**< What stage in attack mode */ 
 +    uint16 ​     attack_movement;/​**<​ What kind of attack movement */ 
 +    uint8       ​will_apply; ​    /​**<​ See crossfire.doc and @ref WILL_APPLY_xxx */ 
 +    sint8       ​sound_chance; ​  /​**<​ Probability,​ 0 to 100, of the object emitting a sound. */ 
 +    struct obj  *spellitem; ​    /​**<​ Spell ability monster is choosing to use */ 
 +    double ​     expmul; ​        /​**<​ needed experience ​(calc_exp*expmul) - means some 
 +                                 * races/​classes can need less/more exp to gain levels */ 
 + 
 +    /* Spell related information,​ may be useful elsewhere 
 +     * Note that other fields are used - these files are basically 
 +     * only used in spells. 
 +     */ 
 +    sint16 ​     casting_time; ​  /​**<​ Time left before spell goes off */ 
 +    sint16 ​     duration; ​      /​**<​ How long the spell lasts */ 
 +    uint8       ​duration_modifier;​ /**< how level modifies duration */ 
 +    sint8       ​range; ​         /**< Range of the spell */ 
 +    uint8       ​range_modifier;​ /**< How going up in level effects range  */ 
 +    uint8       ​dam_modifier; ​  /​**<​ How going up in level effects damage */ 
 +    struct obj  *spell; ​        /​**<​ Spell that was being cast */ 
 +    char        *spellarg;​ 
 + 
 +    /* Following are values used by any object */ 
 +    struct archt *arch; ​        /​**<​ Pointer to archetype */ 
 +    struct archt *other_arch; ​  /​**<​ Pointer used for various things - mostly used for what 
 +                                 * this objects turns into or what this object creates */ 
 +    uint32 ​     flags[4]; ​      /​**<​ Various flags */ 
 +    uint16 ​     animation_id; ​  /​**<​ An index into the animation array */ 
 +    uint8       ​anim_speed; ​    /​**<​ Ticks between animation-frames */ 
 +    uint8       ​last_anim; ​     /**< Last sequence used to draw face */ 
 +    uint16 ​     temp_animation_id;​ /**< An index into the temporary animation array */ 
 +    uint8       ​temp_anim_speed;​ /**< Ticks between temporary animation-frames */ 
 +    sint32 ​     elevation; ​     /**< Elevation of this terrain - used in weather code */ 
 +    uint8       ​smoothlevel; ​   /**< how to smooth this square around*/ 
 +    uint8       ​map_layer; ​     /**< What level to draw this on the map */ 
 + 
 +    MoveType ​   move_type; ​     /**< Type of movement this object uses */ 
 +    MoveType ​   move_block; ​    /​**<​ What movement types this blocks */ 
 +    MoveType ​   move_allow; ​    /​**<​ What movement types explicitly allowed */ 
 +    MoveType ​   move_on; ​       /**< Move types affected moving on to this space */ 
 +    MoveType ​   move_off; ​      /​**<​ Move types affected moving off this space */ 
 +    MoveType ​   move_slow; ​     /**< Movement types this slows down */ 
 +    float       ​move_slow_penalty;​ /**< How much this slows down the object */ 
 + 
 +    const char  *custom_name; ​  /​**<​ Custom name assigned by player */ 
 +    key_value ​  ​*key_values; ​   /**< Fields not explictly known by the loader. */ 
 + 
 +    sint16 ​     *discrete_damage;​ /**< damage values, based on each attacktype. */ 
 +    tag_t       ​*spell_tags;​ 
 +} object; 
 +</​code>​ 
 + 
 +---- 
 + 
 +===== Head Part of Struct ​==
  
 ==== contr ==== ==== contr ====
 Type: pl * Type: pl *
  
-Meaning: +CommentPointer ​to the player which control this object. ​ 
-  * pointer ​to the player which control this object. Will only be set for the player'​s object itself, and not items in inventory.+   
 +Meaning:  ​Will only be set for the player'​s object itself, and not items in inventory.
  
  
Line 27: Line 236:
 Type: obj * Type: obj *
  
-Meaning: +CommentPointer ​to the next object in the free/used list.  
-  * pointer ​to the next object in the free/used list. Should not be used much+   
- +Meaning:  ​Should not be used much.
-FIXME check ''​server/​c_object.c:​840'',​ line ''​for (tmp=op->​below;​ tmp!=NULL; tmp=tmp->​next)''​ \\ sounds suspicious (should probably be ''​tmp->​below''​).+
  
 +FIXME check ''​server/​c_object.c:​840'',​ \\
 +line ''​for (tmp=op->​below;​ tmp!=NULL; tmp=tmp->​next)''​ \\ 
 +sounds suspicious (should probably be ''​tmp->​below''​).
  
 ==== prev ==== ==== prev ====
 Type: obj * Type: obj *
  
-Meaning: +CommentPointer ​to the next object in the free/used list.  
-  * pointer ​to the next object in the free/used list. Should not be used much.+ 
 +Meaning: ​Should not be used much.
  
  
Line 43: Line 255:
 Type: obj * Type: obj *
  
-Meaning: +CommentNext object in the '​active'​ list. This is used in process_events() so that the entire object list does not need to be gone through. ​ 
-  * next object in the '​active'​ list. This is used in process_events() so that the entire object list does not need to be gone through. Should not be used much.+   
 +Meaning: ​Should not be used much.
  
  
Line 50: Line 263:
 Type: obj * Type: obj *
  
-Meaning: +CommentPrevious ​object in the '​active list This is used in process_events so that the entire object list does not need to be gone through. ​ 
-  * previous ​object in the '​active list This is used in process_events so that the entire object list does not need to be gone through. Should not be used much.+   
 +Meaning: ​Should not be used much.
  
  
Line 57: Line 271:
 Type: obj * Type: obj *
  
-Meaning: +CommentPointer ​to the object stacked below this one.  
-  * pointer ​to the object stacked below this one. Will link items on a same spot, or in the same container.+ 
 +Meaning: ​Will link items on a same spot, or in the same container.
  
  
Line 64: Line 279:
 Type: obj * Type: obj *
  
-Meaning: +CommentPointer ​to the object stacked above this one. 
-  * pointer ​to the object stacked above this one.  Will link items on a same spot, or in the same container.+   
 +Meaning: ​ Will link items on a same spot, or in the same container.
  
  
 +==== inv ====
 +Type: obj * 
  
- +CommentPointing ​to the first item in inventory. ​
-==== inv ==== +
-Typeobject * pointing ​to the first item in inventory. Other items are available through ''​below''​ chaining.+
  
 Meaning: Meaning:
Line 77: Line 293:
   * for generators with the FLAG_CONTENT_ON_GEN flag it is the item generated.   * for generators with the FLAG_CONTENT_ON_GEN flag it is the item generated.
   * for living things and containers {FIXME flags for that}, what this holds.   * for living things and containers {FIXME flags for that}, what this holds.
 +
 +Other items are available through [[#below]] chaining.
  
 ==== container ==== ==== container ====
 Type: obj * Type: obj *
  
-Meaning: Current container being used. I think this is only used by the player right now.+Comment: Current container being used. I think this is only used by the player right now. 
 + 
 +Meaning:
  
 ==== env ==== ==== env ====
 Type: obj * Type: obj *
  
-Meaning: Pointer to the object which is the environment. This is typically the container that the object is in.+Comment: Pointer to the object which is the environment. This is typically the container that the object is in. 
 + 
 +Meaning:
  
 ==== more ==== ==== more ====
 Type: obj * Type: obj *
  
-Meaning: Pointer to the rest of a large body of objects+Comment: Pointer to the rest of a large body of objects 
 + 
 +Meaning:
  
 ==== head ==== ==== head ====
 Type: obj * Type: obj *
  
-Meaning: Points to the main object of a large body+Comment: Points to the main object of a large body 
 + 
 +Meaning: Large bodies are archetypes that occupy more than one tile on a map ( monsters, buildings ) . 
  
 ==== map ==== ==== map ====
 Type: mapdef * Type: mapdef *
  
-Meaning: Pointer to the map in which this object is present+Comment: Pointer to the map in which this object is present 
 + 
 +Meaning: 
  
 ==== count ==== ==== count ====
 Type: tag_t Type: tag_t
  
-Meaning: Unique object number for this object+Comment: Unique object number for this object
  
 +Meaning:
  
  
 +==== dialog_information ====
 +Type: struct_dialog_information *
 +
 +Comment: Parsed dialog information for this object. Valid if FLAG_DIALOG_PARSED is set (but can be NULL).
 +
 +Meaning: NEW introduced since ?
 +
 +
 +
 +----
 +
 +
 +===== Memcpy Part of Struct ==
 +Needs to be unsorted.
 +
 +<WRAP lo>
 +    /* These get an extra add_refcount(),​ after having been copied by memcpy().
 +     * All fields beow this point are automatically copied by memcpy. ​ If
 +     * adding something that needs a refcount updated, make sure you modify
 +     * object_copy() to do so.  Everything below here also gets cleared
 +     * by object_clear() */
 +</​WRAP>​
 +
 +==== artifact ====
 +Type: sstring
 +
 +Comment: If set, the item is the artifact with this name and the matching type.
 +
 +Meaning: NEW introduced since ?
  
  
Line 115: Line 375:
 Type: const char * (shared string) Type: const char * (shared string)
  
-Meaning: The name of the object, obviously...+Comment: The name of the object, obviously... 
 + 
 +Meaning:
  
 ==== name_pl ==== ==== name_pl ====
 Type: const char * (shared string) Type: const char * (shared string)
  
-Meaning:  The plural name of the object. Shared string.+Comment:  The plural name of the object. ​
  
 +Meaning: Shared string.
 +
 +==== anim_suffix ====
 +Type: const char
 +
 +Comment: Used to determine combined animations
 +
 +When a player or a monster attacks or uses a skill, if this suffix is defined on the weapon (combat) or the skill (skill use), the server tries to find an animation named "​[player_or_monster_animation]_[anim_suffix]"​.
 +
 +For instance, for a Fenx using an animation "​fenx_player"​ who uses a sword (anim_suffix "​sword"​),​ when attacking, the "​fenx_player_sword"​ animation will be used if it exists.
 +
 +If no suffix is defined or the animation doesn'​t exist, then nothing happens, else the animation is applied until it finished.
 ==== title ==== ==== title ====
 Type: const char * (shared string) Type: const char * (shared string)
  
-Meaning: Of foo, etc.+Comment: Of foo, etc. 
 + 
 +Meaning:
  
 ==== race ==== ==== race ====
 Type: const char * (shared string) Type: const char * (shared string)
  
-  * for living things: Human, goblin, dragon, etc. +Comment: Human, goblin, dragon, etc.
-  * for SPELL with SP_RAISE_DEAD subtype, if set, then this is the name of a treasurelist of possible races in which the character will be reincarnated into+
  
 +Meaning: For "​living"​ things. \\
 +For SPELL with SP_RAISE_DEAD subtype, if set, then this is the name of a treasurelist of possible races in which the character will be reincarnated into
  
 ==== slaying ==== ==== slaying ====
 Type: const char * (shared string) Type: const char * (shared string)
 +
 +Comment: Which race to do double damage to. If this is an exit, this is the filename.
  
 Meaning: Meaning:
-  * which race to do double damage to. +  * <​del>​**!/**</​del>​ **/​!** ​means '​random map', ​msg-endmsg block then contains parameters.
-  ​for EXITs, this is the filename. ​!/ means '​random map', ​message ​then contains parameters.+
   * for DOORs, means it's locked.   * for DOORs, means it's locked.
   * for KEYs, they will unlock DOORs with matching slaying   * for KEYs, they will unlock DOORs with matching slaying
   * for DETECTOR, what item to check for   * for DETECTOR, what item to check for
 +
 FIXME many more uses FIXME many more uses
  
Line 148: Line 427:
 Type: const char * (shared string) Type: const char * (shared string)
  
-Meaning: Name of the skill this object uses/grants+Comment: Name of the skill this object uses/grants
  
 +Meaning:
  
  
 ==== msg ==== ==== msg ====
 Type: const char * (shared string) Type: const char * (shared string)
 +
 +Comment: If this is a book/​sign/​magic mouth/etc
  
 Meaning: Meaning:
Line 159: Line 441:
   * for EXITs pointing to random maps, map parameters.   * for EXITs pointing to random maps, map parameters.
   * for races players can select, description of the race   * for races players can select, description of the race
 +  ​
 FIXME check other uses. FIXME check other uses.
  
Line 164: Line 447:
 Type: const char * (shared string) Type: const char * (shared string)
  
-Meaning: Obscure information about this object, to get put into books and the like.+Comment: Obscure information about this object, to get put into books and the like. 
 + 
 +Meaning:
  
 ==== x ==== ==== x ====
 Type: sint16 Type: sint16
 +
 +Comment: Position '​x'​ in the map for this object ​
  
 Meaning: Meaning:
Line 174: Line 461:
 Type: sint16 Type: sint16
  
 +Comment: Position '​y'​ in the map for this object
 + 
 Meaning: Meaning:
  
Line 179: Line 468:
 Type: sint16 Type: sint16
  
-Meaning: For debugging: Where it was last inserted+Comment: For debugging: Where it was last inserted 
 + 
 +Meaning:
  
 ==== oy ==== ==== oy ====
 Type: sint16 Type: sint16
  
-Meaning: For debugging: Where it was last inserted+Comment: For debugging: Where it was last inserted 
 + 
 +Meaning: ​
  
 ==== speed ==== ==== speed ====
 Type: float Type: float
 +
 +Comment: The overall speed of this object
  
 Meaning: Meaning:
Line 193: Line 488:
 ==== speed_left ==== ==== speed_left ====
 Type: float Type: float
 +
 +Comment: How much speed is left to spend this round
  
 Meaning: Meaning:
  
-==== nrof ==== +==== weapon_speed ​== 
-Type: uint32+Type: float 
 + 
 +Comment: The overall speed of this object
  
 Meaning: Meaning:
  
-==== face ==== +==== weapon_speed_left ​== 
-Type: New_Face *+Type: float 
 + 
 +Comment: How much speed is left to spend this round
  
 Meaning: Meaning:
 +
 +
 +==== face ==
 +Type: const New_Face *
 +
 +Comment: Face with colors
 +
 +Meaning:
 +
 +
 +==== nrof ====
 +Type: uint32
 +
 +Comment: How many of the objects ​
 +
 +Meaning:
 +
  
 ==== direction ==== ==== direction ====
 Type: sint8 Type: sint8
 +
 +Comment: Means the object is moving that way.
  
 Meaning: Meaning:
Line 213: Line 533:
 ==== facing ==== ==== facing ====
 Type: sint8 Type: sint8
 +
 +Comment: Object is oriented/​facing that way.
  
 Meaning: Meaning:
Line 219: Line 541:
 ==== type ==== ==== type ====
 Type: uint8 Type: uint8
 +
 +Comment: PLAYER, BULLET, etc.  See define.h
  
 Meaning: Meaning:
  
-See Also:  [[dev:object types|dev:​object types]]+See Also:  [[Object Types]] .
  
 ==== subtype ==== ==== subtype ====
 Type: uint8 Type: uint8
 +
 +Comment: Subtype of object
  
 Meaning: Meaning:
Line 231: Line 557:
 ==== client_type ==== ==== client_type ====
 Type: uint16 Type: uint16
 +
 +Comment: Public type information. ​ see doc/​Developers/​objects
  
 Meaning: Meaning:
Line 236: Line 564:
 ==== resist ==== ==== resist ====
 Type: sint16[NROFATTACKS] Type: sint16[NROFATTACKS]
 +
 +Comment: Resistance adjustments for attack
  
 Meaning: Meaning:
Line 241: Line 571:
 ==== attacktype ==== ==== attacktype ====
 Type: uint32 Type: uint32
 +
 +Comment: Bitmask of attacks this object does
  
 Meaning: Meaning:
Line 246: Line 578:
 ==== path_attuned ==== ==== path_attuned ====
 Type: uint32 Type: uint32
 +
 +Comment: Paths the object is attuned to
  
 Meaning: Meaning:
Line 251: Line 585:
 ==== path_repelled ==== ==== path_repelled ====
 Type: uint32 Type: uint32
 +
 +Comment: Paths the object is repelled from
  
 Meaning: Meaning:
Line 257: Line 593:
 Type: uint32 Type: uint32
  
-Meaning: +CommentPaths the object is denied access to
- +
-==== material ==== +
-Type: uint16+
  
 Meaning: Meaning:
Line 266: Line 599:
 ==== materialname ==== ==== materialname ====
 Type: const char * (shared string) Type: const char * (shared string)
 +
 +Coment: Specific material name
  
 Meaning: Meaning:
 +
 +
 +==== material ====
 +Type: uint16
 +
 +Comment: What materials this object consist of
 +
 +Meaning:
 +
  
 ==== magic ==== ==== magic ====
 Type: sint8 Type: sint8
 +
 +Comment: Any magical bonuses to this item
  
 Meaning: Meaning:
Line 276: Line 622:
 ==== state ==== ==== state ====
 Type: uint8 Type: uint8
 +
 +Comment: How the object was last drawn (animation)
  
 Meaning: Meaning:
Line 281: Line 629:
 ==== value ==== ==== value ====
 Type: sint32 Type: sint32
 +
 +Comment: How much money it is worth (or contains)
  
 Meaning: Meaning:
Line 286: Line 636:
 ==== level ==== ==== level ====
 Type: sint16 Type: sint16
 +
 +Comment: Level of creature or object
 +
 +Meaning: Mainly the skill level which a character has to have to successfully cast magic upon monster-with-level . 
 +
 +==== last_eat ====
 +Type: sint16
 +
 +Comment: How long since we last ate
  
 Meaning: Meaning:
Line 291: Line 650:
 ==== last_heal ==== ==== last_heal ====
 Type: sint32 Type: sint32
 +
 +Comment: Last healed. Depends on constitution
  
 Meaning: Meaning:
Line 298: Line 659:
 ==== last_sp ==== ==== last_sp ====
 Type: sint32 Type: sint32
 +
 +Comment: As last_heal, but for spell points ​
  
 Meaning: Meaning:
Line 306: Line 669:
     * 3: make all monsters fall asleep     * 3: make all monsters fall asleep
     * 4: charm all monsters     * 4: charm all monsters
-  * new sp for praying skill when changing god? FIXME check what it means when praying 
   * for CHECK_INV, 0 means player must have object, else player must not have object   * for CHECK_INV, 0 means player must have object, else player must not have object
-  ​* for healing, how many sp to regenerate +  * for TRIGGER_ALTAR ??  
-  ​* for TRIGGER_ALTAR ?? FIXME +    * FIXME 
-  * for DISEASEs, the SYMPTOM'​s last_sp FIXME+  * for DISEASEs, the SYMPTOM'​s last_sp ​ 
 +    * FIXME
   * for objects being thrown, the max number of moves to exist   * for objects being thrown, the max number of moves to exist
   * for monsters, regenerate sp   * for monsters, regenerate sp
 +  * for healing, how many sp to regenerate
 +  * new sp for praying skill when changing god? 
 +    * FIXME check what it means when praying
  
 ==== last_grace ==== ==== last_grace ====
 Type: sint16 Type: sint16
  
-Meaning: +CommentAs last_sp, except for grace
- +
-==== last_eat ==== +
-Type: sint16+
  
 Meaning: Meaning:
Line 326: Line 689:
 ==== invisible ==== ==== invisible ====
 Type: sint16 Type: sint16
 +
 +Comment: How much longer the object will be invis
  
 Meaning: Meaning:
Line 331: Line 696:
 ==== pick_up ==== ==== pick_up ====
 Type: uint8 Type: uint8
 +
 +Comment: See crossfire.doc
  
 Meaning: Meaning:
Line 337: Line 704:
 Type: sint8 Type: sint8
  
-Meaning:+Comment: Power rating of the object 
 + 
 +Meaning: ​The character has a limited item power maximum to be able to apply magical items. \\ 
 +If the sum of the item_power of all applied items reaches the allowed maximum, \\ 
 +no more magical item with //​item_power > 0// can be wielded / worn.
  
 ==== gen_sp_armour ==== ==== gen_sp_armour ====
 Type: sint8 Type: sint8
 +
 +Comment: Sp regen penalty this object has (was last_heal)
 +
 +Meaning:
 +
 +==== glow_radius ====
 +Type: sint8
 +
 +Comment: indicates the glow radius of the object
  
 Meaning: Meaning:
Line 346: Line 726:
 ==== weight ==== ==== weight ====
 Type: sint32 Type: sint32
 +
 +Comment: Attributes of the object
  
 Meaning: Meaning:
Line 351: Line 733:
 ==== weight_limit ==== ==== weight_limit ====
 Type: sint32 Type: sint32
 +
 +Comment: Weight-limit of object
  
 Meaning: Meaning:
Line 357: Line 741:
 Type: sint32 Type: sint32
  
-Meaning: +CommentHow much weight this object contains
- +
-==== glow_radius ==== +
-Type: sint8+
  
 Meaning: Meaning:
 +
  
 ==== stats ==== ==== stats ====
 Type: living Type: living
 +
 +Comment: Str, Con, Dex, etc
  
 Meaning: Meaning:
 +
 +See [[#"​living"​ structure fields]] on this page.
  
 ==== perm_exp ==== ==== perm_exp ====
 Type: sint64 Type: sint64
 +
 +Comment: Permanent exp
  
 Meaning: Meaning:
Line 377: Line 765:
 Type: const char * (shared string) Type: const char * (shared string)
  
-Meaning:+Comment:  
 + 
 +Meaning: ​Not anymore included since when ?
  
 ==== current_weapon ==== ==== current_weapon ====
 Type: obj * Type: obj *
 +
 +Comment: Pointer to the weapon currently used
  
 Meaning: Meaning:
Line 386: Line 778:
 ==== weapontype ==== ==== weapontype ====
 Type: uint32 Type: uint32
 +
 +Comment: Type of weapon
  
 Meaning: Meaning:
Line 392: Line 786:
 Type: uint32 Type: uint32
  
-Meaning:+Comment: 
 + 
 +Meaning: ​Not included anymore since when ?
  
 ==== body_info ==== ==== body_info ====
 Type: sint8[NUM_BODY_LOCATIONS] Type: sint8[NUM_BODY_LOCATIONS]
 +
 +Comment: Body info as loaded from the file
  
 Meaning: Meaning:
Line 401: Line 799:
 ==== body_used ==== ==== body_used ====
 Type: sint8[NUM_BODY_LOCATIONS] Type: sint8[NUM_BODY_LOCATIONS]
 +
 +Comment: Calculated value based on items equipped
  
 Meaning: Meaning:
Line 406: Line 806:
 ==== owner ==== ==== owner ====
 Type: obj * Type: obj *
 +
 +Comment: Pointer to the object which controls this one. Owner should not be referred to directly - object_get_owner() should be used instead.
  
 Meaning: Meaning:
Line 411: Line 813:
 ==== ownercount ==== ==== ownercount ====
 Type: tag_t Type: tag_t
 +
 +Comment: What count the owner had (in case owner has been freed)
  
 Meaning: Meaning:
Line 416: Line 820:
 ==== enemy ==== ==== enemy ====
 Type: obj * Type: obj *
 +
 +Comment: Monster/​player to follow even if not closest
  
 Meaning: Meaning:
Line 421: Line 827:
 ==== attacked_by ==== ==== attacked_by ====
 Type: obj * Type: obj *
 +
 +Comment: This object start to attack us! only player & monster
  
 Meaning: Meaning:
Line 427: Line 835:
 Type: tag_t Type: tag_t
  
-Meaning: +CommentThe tag of attacker, so we can be sure
- +
-==== randomitems ==== +
-Type: treasureliststruct *+
  
 Meaning: Meaning:
Line 436: Line 841:
 ==== run_away ==== ==== run_away ====
 Type: uint16 Type: uint16
 +
 +Comment: Monster runs away if it's hp goes below this percentage.
  
 Meaning: Meaning:
 +
 +==== randomitems ====
 +Type: treasureliststruct *
 +
 +Comment: Items to be generated ​
 +
 +Meaning:
 +
  
 ==== chosen_skill ==== ==== chosen_skill ====
 Type: obj * Type: obj *
 +
 +Comment: The skill chosen to use
  
 Meaning: Meaning:
Line 446: Line 863:
 ==== hide ==== ==== hide ====
 Type: uint32 Type: uint32
 +
 +Comment: The object is hidden, not invisible
  
 Meaning: Meaning:
Line 451: Line 870:
 ==== move_status ==== ==== move_status ====
 Type: sint32 Type: sint32
 +
 +Comment: What stage in attack mode
  
 Meaning: Meaning:
Line 456: Line 877:
 ==== attack_movement ==== ==== attack_movement ====
 Type: uint16 Type: uint16
 +
 +Comment: What kind of attack movement
  
 Meaning: Meaning:
Line 461: Line 884:
 ==== will_apply ==== ==== will_apply ====
 Type: uint8 Type: uint8
 +
 +Comment: See crossfire.doc and @ref WILL_APPLY_xxx
  
 Meaning: Meaning:
 +
 +==== sound_chance ====
 +Type: sint8
 +
 +Comment: Probability,​ 0 to 100, of the object emitting a sound.
 +
 +Meaning: NEW since when ?
  
 ==== spellitem ==== ==== spellitem ====
 Type: obj * Type: obj *
 +
 +Comment: Spell ability monster is choosing to use
  
 Meaning: Meaning:
Line 471: Line 905:
 ==== expmul ==== ==== expmul ====
 Type: double Type: double
 +
 +Comment: needed experience = (calc_exp*expmul) - means some races/​classes can need less/more exp to gain levels
  
 Meaning: Meaning:
  
-==== duration ​====+==== casting_time ​====
 Type: sint16 Type: sint16
  
-Meaning: +CommentTime left before spell goes off
- +
-==== duration_modifier ==== +
-Type: uint8+
  
 Meaning: Meaning:
  
-==== casting_time ​====+==== duration ​====
 Type: sint16 Type: sint16
 +
 +Comment: How long the spell lasts
  
 Meaning: Meaning:
  
-==== spell ==== +==== duration_modifier ​==== 
-Type: obj *+Type: uint8 
 + 
 +Comment: how level modifies duration
  
 Meaning: Meaning:
  
-==== start_holding ​==== +==== range ==== 
-Type: uint16+Type: sint8 
 + 
 +Comment: Range of the spell
  
 Meaning: Meaning:
  
-==== spellarg ​==== +==== range_modifier ​==== 
-Type: char *+Type: uint8 
 + 
 +Comment: How going up in level effects range
  
 Meaning: Meaning:
Line 506: Line 947:
 ==== dam_modifier ==== ==== dam_modifier ====
 Type: uint8 Type: uint8
 +
 +Comment: How going up in level effects damage
  
 Meaning: Meaning:
  
-==== range ==== + 
-Type: sint8+==== spell ==== 
 +Type: obj * 
 + 
 +Comment: Spell that was being cast
  
 Meaning: Meaning:
  
-==== range_modifier ​==== +==== spellarg ​==== 
-Type: uint8+Type: char * 
 + 
 +Comment: No comment available
  
 Meaning: Meaning:
 +
 +==== start_holding ====
 +Type: uint16
 +
 +Comment:
 +
 +Meaning: Not included anymore ?
 +
  
 ==== arch ==== ==== arch ====
 Type: archt * Type: archt *
 +
 +Comment: Pointer to archetype
  
 Meaning: Meaning:
Line 526: Line 984:
 ==== other_arch ==== ==== other_arch ====
 Type: archt * Type: archt *
 +
 +Comment: Pointer used for various things - mostly used for what this objects turns into or what this object creates
  
 Meaning: Meaning:
 +
  
 ==== flags ==== ==== flags ====
 Type: uint32[4] Type: uint32[4]
 +
 +Comment: Various flags
  
 Meaning: Meaning:
Line 536: Line 999:
 ==== animation_id ==== ==== animation_id ====
 Type: uint16 Type: uint16
 +
 +Comment: An index into the animation array
  
 Meaning: Meaning:
Line 541: Line 1006:
 ==== anim_speed ==== ==== anim_speed ====
 Type: uint8 Type: uint8
 +
 +Comment: Ticks between animation-frames
  
 Meaning: Meaning:
 +
  
 ==== last_anim ==== ==== last_anim ====
 Type: uint8 Type: uint8
 +
 +Comment: Last sequence used to draw face
  
 Meaning: Meaning:
 +
 +
 +==== temp_animation_id ====
 +Type: uint16
 +
 +Comment: An index into the temporary animation array
 +
 +Meaning:
 +
 +==== temp_anim_speed ====
 +Type: uint8
 +
 +Comment: Ticks between temporary animation-frames
 +
 +Meaning:
 +
  
 ==== elevation ==== ==== elevation ====
 Type: sint32 Type: sint32
 +
 +Comment: Elevation of this terrain - used in weather code 
  
 Meaning: Meaning:
Line 556: Line 1044:
 ==== smoothlevel ==== ==== smoothlevel ====
 Type: uint8 Type: uint8
 +
 +Comment: how to smooth this square around
  
 Meaning: Meaning:
Line 561: Line 1051:
 ==== map_layer ==== ==== map_layer ====
 Type: uint8 Type: uint8
 +
 +Comment: What level to draw this on the map
  
 Meaning: Meaning:
 +
  
 ==== move_type ==== ==== move_type ====
 Type: MoveType Type: MoveType
 +
 +Comment: Type of movement this object uses
  
 Meaning: Meaning:
Line 573: Line 1068:
 Type: MoveType Type: MoveType
  
-Meaning ​Prevents a character or monster from moving onto a tile occupied by the object.+CommentWhat movement types this blocks
  
-  * Each part of a multi-tile object may have unique setting, unlike many other modifiers that are omitted or ignored in non-head parts.+Meaning: ​ Prevents a character or monster from moving onto a tile occupied by the object. \\ 
 +Each part of a multi-tile object may have an unique setting, unlike many other modifiers ​\\ 
 +that are omitted or ignored in non-head parts.
  
 See also [[objects#​move_block]] on the [[objects]] page. See also [[objects#​move_block]] on the [[objects]] page.
 +
 +
 ==== move_allow ==== ==== move_allow ====
 Type: MoveType Type: MoveType
 +
 +Comment: What movement types explicitly allowed
  
 Meaning: Meaning:
Line 585: Line 1086:
 ==== move_on ==== ==== move_on ====
 Type: MoveType Type: MoveType
 +
 +Comment: Move types affected moving on to this space
  
 Meaning: Meaning:
Line 590: Line 1093:
 ==== move_off ==== ==== move_off ====
 Type: MoveType Type: MoveType
 +
 +Comment: Move types affected moving off this space
  
 Meaning: Meaning:
Line 595: Line 1100:
 ==== move_slow ==== ==== move_slow ====
 Type: MoveType Type: MoveType
 +
 +Comment: Movement types this slows down 
  
 Meaning: Meaning:
Line 600: Line 1107:
 ==== move_slow_penalty ==== ==== move_slow_penalty ====
 Type: float Type: float
 +
 +Comment: How much this slows down the object
  
 Meaning: Meaning:
 +
  
 ==== custom_name ==== ==== custom_name ====
 Type: const char * (shared string) Type: const char * (shared string)
 +
 +Comment: Custom name assigned by player
  
 Meaning: Meaning:
Line 610: Line 1122:
 ==== key_values ==== ==== key_values ====
 Type: key_value * Type: key_value *
 +
 +Comment: Fields not explictly known by the loader.
  
 Meaning: Meaning:
Line 617: Line 1131:
 Type: uint8 Type: uint8
  
-Meaning:+Comment: 
 + 
 +Meaning: ​Not included anymore ? 
 + 
 +----
  
 +====== "​living"​ structure fields =====
  
-===== "​living"​ structure fields ===== 
  
 ==== Str ==== ==== Str ====
Line 674: Line 1192:
  
 Meaning: Meaning:
- 
- 
- 
  
  
Line 691: Line 1206:
  
 Meaning: Meaning:
- 
- 
  
 ==== sp ==== ==== sp ====
Line 745: Line 1258:
  
 Meaning: Meaning:
- 
- 
  
 ==== luck ==== ==== luck ====
Line 754: Line 1265:
  
  
-===== Key/value fields =====+====== Key/value fields ​======
 Those fields are not part of the ''​object''​ or ''​Stats''​ structures, but used through the key/value mechanism. Those fields are not part of the ''​object''​ or ''​Stats''​ structures, but used through the key/value mechanism.
  
-==== price_adjustmentprice_adjustment_buy ​and price_adjustment_sell ​====+==== price_* == 
 +=== price_adjustment ​== 
 +=== price_adjustment_buy == 
 +=== price_adjustment_sell ​==
 Those control the price the item should have. They are a ratio from the item's raw value, and are applied without any bargaining / charism / shop specialization effect. Those control the price the item should have. They are a ratio from the item's raw value, and are applied without any bargaining / charism / shop specialization effect.
  
Line 771: Line 1285:
  
 ==== item_owner ==== ==== item_owner ====
-Player owning the item, so other players can't bless it. If set, the item can't be applied by another player unless he has enough experience (see item_willpower).+Player owning the item, so other players can't bless it. \\ 
 +If set, the item can't be applied by another player unless he has enough experience (see item_willpower).
  
  
 ==== generator_code ==== ==== generator_code ====
-For GENERATOR ({FIXMEreal flag) objects, a key to copy to generated monsters, so they can be tracked.+For GENERATOR (FIXME real flag) objects, a key to copy to generated monsters, so they can be tracked.
  
 ==== generator_max ==== ==== generator_max ====
-For GENERATOR ({FIXMEditto) objects, the maximum number of generated monsters allowed at the same time.+For GENERATOR (FIXME ditto) objects, the maximum number of generated monsters allowed at the same time.
  
 ==== generator_name ==== ==== generator_name ====
-Name of the generator ​{FIXME}, used for generator_code value. If unset will use generator'​s name, else ''​generator''​.+Name of the generator FIXME, used for generator_code value. ​\\ 
 +If unset will use generator'​s name, else ''​generator''​.
  
 ==== on_use_yield ==== ==== on_use_yield ====
-Should be the name of an archetype. When containing object is applied, this specific object is generated, and inserted at the same place as the containing object. Used mostly for giving empty bottles when drinking stuff.+Should be the name of an archetype. When containing object is applied, ​\\ 
 +this specific object is generated, and inserted at the same place as the containing object. ​\\ 
 +Used mostly for giving empty bottles when drinking stuff.
  
 ==== item_willpower ==== ==== item_willpower ====
Line 790: Line 1308:
  
 ==== passenger_limit ==== ==== passenger_limit ====
-For TRANSPORT ({FIXMEreal type), the maximum players can board at the same time.+For TRANSPORT (FIXME real type), the maximum players can board at the same time.
  
-==== face_full ​and anim_full ​====+==== *_full == 
 +=== face_full ==  
 +=== anim_full ​===
 For TRANSPORT, face to use when it's full. For TRANSPORT, face to use when it's full.
  
 +==== *_speed ===
 +=== weight_speed_ratio ==
 +=== base_speed ===
 +Control the max speed of the TRANSPORT, based on the formula ​
 +speed = base_speed - (base_speed * weight the transport is carrying * weight_speed_ratio) / (transport'​s weight_limit * 100
  
-==== weight_speed_ratio and base_speed ​==== +==== spell_expiry_warn_* ​==
-Control the max speed of the TRANSPORT, based on the formula speed = base_speed - (base_speed * weight the transport is carrying * weight_speed_ratio) / (transport'​s weight_limit * 100+
  
-==== spell_expiry_warn_1 ​and spell_expiry_warn_2 ​====+=== spell_expiry_warn_1 =
 +=== spell_expiry_warn_2 ​===
 Those are used by spell effects, to store when player should be warned of effect expiration. Player will get a message when spell'​s duration reaches the first value, then the second. Will be set by the code automatically,​ should be a number parsable via atoi(). Those are used by spell effects, to store when player should be warned of effect expiration. Player will get a message when spell'​s duration reaches the first value, then the second. Will be set by the code automatically,​ should be a number parsable via atoi().
dev/object_fields.1523215849.txt.gz · Last modified: 2018/04/08 14:30 by karl