diff options
Diffstat (limited to 'info')
-rw-r--r-- | info/ent_structure.txt | 392 |
1 files changed, 392 insertions, 0 deletions
diff --git a/info/ent_structure.txt b/info/ent_structure.txt new file mode 100644 index 0000000..394ccef --- /dev/null +++ b/info/ent_structure.txt @@ -0,0 +1,392 @@ +Written by Davo ([email protected]) +(parts marked //kami0 supplied by Michael 'kami0' DiGiovanni ([email protected])) + +These are the attributes which all entities have. This is an explanation of the type +'edict_t'. Attributes are referenced by the format 'entity_name->attribute' (eg self->angle) + +Many of these will be familiar to QuakeC programers. + +NOTE - Not all of these are relevant to all entities (infact there are no entities +for which all of these are relevant). + +name type notes + +absmin, absmax vec3_t position of min and max points of entity + relative to the world's origin +accel float acceleration of platforms +activator edict_t * entity which activated the current entity +air_finished float time when air will run out (when underwater) +angle float entity yaw set by level editor (-1 = up; -2 = down) +area link_t ? +areanum, areanum2 int area where you currently are used when + checking if monsters can hear sounds +attenuation float attenuation of above sound (set at level edit) +avelocity vec3_t angular velocity (see note for velocity) +blocked void function to call when blocked? (optional) +chain editc_t * used when creating a list of entities +classname char * type of entity (eg 'player','monster_soldier') +client struct gclient_s* points to the player controling it, NULL + if not player controled +clipmask int type of objects the entity will not pass through + can be any of MASK_* or CONTENTS_* listed at bottom + of this document +clusternums[] int ? +combattarget char * name of entity to attack (used once) +count int general purpose 'amount' variable, often set in level editor +damage_debounce_time float time when lava/slime can do more damage to player +deadflag int state of deadness : + DEAD_NO, DEAD_DYING, DEAD_DEAD, DEAD_RESPAWNABLE +deathtarget char * name of entity to use when current entity dies +decel float deceleration of platforms +delay float time between triggering switch and effect activating +die void function to call when health <= 0 (MUST be present if the + entity can take damage) +dmg int damage done by entity +dmg_radius float area to do radius damage +enemy edict_t * entity to attack +flags int various attributes : + FL_FLY -flying + FL_SWIM -swimming, won't drown + FL_IMMUNE_LASER -not hurt by laser + FL_INWATER -set when entering water, cleared when + leaving + FL_GODMODE -god-mode on + FL_NOTARGET -will not be targeted by monsters + FL_IMMUNE_SLIME -not hurt by slime + FL_IMMUNE_LAVA -not hurt by lava + FL_PARTIAL_GROUND -ground pulled out from under monster + FL_WATERJUMP -player jumping from water + FL_TEAMSLAVE -not first member of a team + FL_NO_KNOCKBACK -entity not thrown back by damage + FL_POWER_ARMOR -active power armor + FL_RESPAWN -entity waiting before re-spawning +fly_sound_debounce_time float used with looping sound when pushing player (in_trigger.c) +freetime float time when entity was freed-up in memory +gib_health int health at which to gib :) +goalentity edict_t * entity currently moving towards +gravity float not used by any entites, but can be used to define reduced/ + increased gravity for individual entities (normal=1.0) +groundentity edict_t * what the entity is standing on +groundentity_linkcount int used in conjunction with linkcount to see if the current + entity is still standing on the groundentity +headnode int ? +health int health of entity, increased and set in many places, but + should only be reduced by t_damage() +ideal_yaw float yaw the entity wants to face +inuse qboolean the entity exists in the world +item gitem_t * info about item (see below) +killtarget char * name of entity to remove when current entity triggered +last_move_time float time to play earthquake sound again +light_level int player's light level, used by monsters when checking if + player can be seen +linkcount int changed by the gi.linkentity function ? +map char * filename of the next map, part of entity target_changelevel +mass int used when pushing entites and calculating knock-back for + weapons (eg rocket hits) +max_health int maximum health +message char * message when entity activated (set by level editor) +mins, maxs vec3_t position of min and max points of entity + relative to its origin +model char * filename of entitie's model +monsterinfo monsterinfo_t info about the monster (see below) +move_angles vec3_t the angle that the gun turret is facing +move_origin vec3_t the origin of the gun turret +movedir vec3_t direction currently moving in +moveinfo moveinfo_t used by the ships flying overhead +movetarget edict_t * entity to wark towards when not got anything better to do + (such as killing the player) +movetype int how the entity moves : + MOVETYPE_NONE -never moves + MOVETYPE_NOCLIP -ignores walls, entities, etc. + MOVETYPE_PUSH -ignores walls, pushes entities + MOVETYPE_STOP -ignores walls, stops on entities + MOVETYPE_WALK -affected by gravity + MOVETYPE_STEP -gravity, special edge handling, + used by monsters + MOVETYPE_FLY -no gravity, used by flying monsters + MOVETYPE_TOSS -gravity, hits ground and stops + MOVETYPE_FLYMISSILE -weapons, extra clip size when + hitting monsters + MOVETYPE_BOUNCE -bounces (eg grenade) +mynoise,mynoise2 edict_t * spawned when player makes a noise, monsters can home in on + them +nextthink float time at which entity should call function 'ent->think' +noise_index int index of sound to play when entity is triggered +noise_index2 int not used anywhere +num_clusters int ? +oldenemy edict_t * player they were attacking before distracted (by anither + monster hitting them) +pain void function to call when hurt (optional) +pain_debounce_time float prevent pain sounds/anims playing to often +pathtarget char * name of entity to move towards +pos1 vec3_t top position of lift +pos2 vec3_t bottom position of lift +powerarmor_time float time to stop showing translucent shield effects +prethink void function to call before each frame (optional) +owner edict_t * usually the entity that spawned this entity (eg + bullet is 'owned' by the monster that fired it) +radius_dmg int amount of radius damage done by entity +random float used to add a bit of time variation to func_timer +s entity_state_t has several subtypes (see below) +show_hostile qboolean any monsters seeing this one will inherit its enemy +size vec3_t size of entity (vector from mins to maxs) +solid solid_t solidity of entity : + SOLID_NOT -no interaction with other objects + SOLID_TOUCH -touch inside after moving (used for + triggers) + SOLID_BBOX -touch on side (monsters, etc) + SOLID_BDP -bsp clip, touch on edge (for solid + walls, blocks, etc) +sounds int type of sounds to play - used by doors, lifts, etc +spawnflags int set by level editor, some values are :SPAWNFLAG_NOT_EASY, + SPAWNFLAG_NOT_MEDIUM, SPAWNFLAG_NOT_HARD, + SPAWNFLAG_NOT_DEATHMATCH, SPAWNFLAG_NOT_COOP + There are other possible settings, which I have not yet + looked at in detail. +speed float speed of misc entities, including moving buttons, the + gun turret and the fly-by ships +style int type of entities (eg type of health box) also used as + areaportal number (something to do with separating areas) +svflags int either : SVF_NOCLIENT - don't send to clients + SVF_DEADMONSTER - a dead monster + SVF_MONSTER - same, a bit earlier +takedamgage int can the entity be damaged? : + DAMAGE_NO -will not take damage + DAMAGE_YES -will take damage + DAMAGE_AIM -will take damage + weapons 'auto-aim' at it +target char * name of entity to trigger or move towards +target_ent editc_t * entity that platform/lift is moving towards +targetname char * name pointed to by target +team char * name of team which entity is part of +teamchain edict_t * the next entity in the team +teammaster edict_t * the master entity in the team +teleport_time float time when monster teleported into level +think void sets the function that should be called at time nextthink +timestamp float used by various functions to mark the spawn time of an + entity or the start of a change (eg a light ramp) +touch void function to call when it touches another entity/the world + (optional) +touch_debounce_time float prevent touch function from being called again too quickly +use void function to call when used (optional) +viewheight int height above origin where eyes are found +velocity vec3_t current velocity. I think this is used in the external + c code to change the entity's position. Can anyone confirm + whether this is internal or external? +volume float volume when playing above sound (set at level edit) +wait float time to wait before platform moves to the next point on its + path +waterlevel int height of liquid : + 0 - not in liquid + 1 - feet in liquid + 2 - on surface of liquid + 3 - surrounded by liquid +watertype int type of water the entity is in (see the CONTENTS_* list + at bottom of document) +yaw_speed float speed to turn towards ideal yaw + + +gitem_t + +referenced by 'entity_name->item.attribute' + +Name Type Notes + +ammo char * type of ammo to use +classname char * name when spawning it +count_width int number of digits to display by icon +drop void function called when entity dropped +flags int type of pickup : + IT_WEAPON, IT_AMMO, IT_ARMOR +icon char * filename of icon +info void * ? unused +pickup qboolean function called when entity picked up +pickup_name char * displayed onscreen when item picked up +pickup_sound char * filename of sound to play when picked up +precaches char * string containing all models, sounds etc. needed by this + item +quantity int ammo gained by item/ammo used per shot by item +tag int ? unused +use void function called when entity used +view_model char * filename of model when being held +weaponthink void unused function +world_model char * filename of model when item is sitting on level +world_model_flags int copied to 'ent->s.effects' (see s.effects for values) + + +monsterinfo_t + +referenced by 'entity_name->monsterinfo.attribute' + +Name Type Notes + +aiflags int controls how the monster will behave : + AI_STAND_GROUND -don't move + AI_TEMP_STAND_GROUND -stand ground for a short time + (don't get too close to enemy?) + AI_SOUND_TARGET -look for source of a sound + AI_LOST_SIGHT -just lost sight of player + AI_PURSUIT_LAST_SEEN - + AI_PURSUE_NEXT -able to get to last sighting point + this frame + AI_PURSUE_TEMP -continue to persue for a bit + AI_HOLD_FRAME -entity will hold the same frame + (eg machine gun firing) + AI_GOOD_GUY -don't attack you (prisoners) + AI_BRUTAL -keep attacking until enemy's + health < -80 (usualy stop at 0) + AI_NOSTEP -used by exploding box + AI_DUKED -monster's (pathetic) attempts to + evade your shots + AI_COMBAT_POINT -ignores everything else until it + reaches it's destination + AI_MEDIC -healing something (stop when the + 'enemy's health > 0 ) + AI_RESURRECTING -it's ALIVE!!! (almost) show + resurection effects +attack_finished float time when attack will be finished (prevents further attacks + before monster is ready) +attack_state int attack method the monster is using : + AS_STRAIGHT -moving forwards to firing position + AS_SLIDING -moving sideways to firing position + AS_MELEE -close range attack + AS_MISSILE -long range attack +currentmove mmove_t * current set of frames cycling between +idle_time float time until which the idle animation should be played +last_sighting vec3_t last point where the player was seen +lefty int if and attack_state is AS_SLIDING, the monster will go left + otherwise it'll go right. this is swapped each time +linkcount int changed by gi.linkentity? +nextframe int next frame to display +pausetime float time to stop at a particular path_corner +power_armor_power int energy the armor has left +power_armor_type int type of power armor: + POWER_ARMOR_NONE, POWER_ARMOR_SCREEN, POWER_ARMOR_SHIELD 2 +saved_goal vec3_t if the monster can't get to where it wants to this frame, + that position is saved here +scale float adjusts the running speed of the monster +search_time float time to keep looking for player +trail_time float timestamp of last section of player's trail found + +The following functions are called when certain conditions are met: + +attack void ranged attack (optional) +checkattack qboolean function called to see if the monster will attack this frame +dodge void !!INCOMING!! so just duck 'cos they wouldn't aim for your + feet, would they? (optional) +idle void animation to 'spice up' the standing around (optional) +melee void close-up attack (optional) +run void has an enemy, getting ready to attack +search void searching for player animation (optional) +sight void just spotted someone (optional) +stand void function to call when just standing around +walk void moving towards movetarget + +entity_state_t + +attributes here are referenced by 'entity_name->s.attribute' + +Name Type Notes + +angles vec3_t angles of the entity : + ...angles[0] = pitch + ...angles[1] = yaw + ...angles[2] = roll (not really used) +frame int current frame +effects int special effects to apply to entity can be one or more of: + EF_ROTATE -rotates (bonus items) + EF_GIB -leave a blood trail + EF_BLASTER -coloured light + trail + EF_ROCKET -coloured light + trail + EF_GRENADE -smoke trail? + EF_HYPERBLASTER -light + trail + EF_BFG -light + particles? + EF_COLOR_SHELL -coloured glow around the entity + EF_POWERSCREEN -green screen + EF_ANIM01 -automatically cycle between frames 0 and 1 at 2 hz + EF_ANIM23 -automatically cycle between frames 2 and 3 at 2 hz + EF_ANIM_ALL -automatically cycle through all frames at 2hz + EF_ANIM_ALLFAST -automatically cycle through all frames at 10hz + EF_FLIES -flies effect + EF_QUAD -quad damage 'glow' + EF_PENT -invincibility 'glow' +event int effects that last one frame : + EV_NONE -no effect + EV_ITEM_RESPAWN -item respawning + EV_FOOTSTEP -footstep noise + EV_FALLSHORT -noise from small fall + EV_MALE_FALL -noise from male falling + EV_MALE_FALLFAR -noise from male falling a long way + EV_FEMALE_FALL -noise from female falling + EV_FEMALE_FALLFAR -noise from female falling a long way + EV_PLAYER_TELEPORT-teleportation effects +modelindex int index of precached model +modelindex2 int for when one modelindex just isn't enough ;). Used with + the final 2-stage boss (oops, sorry if that's a spolier) + and to show separate player weapons +modelindex3,4 int not used +number int entity index number +old_origin vec3_t last position of entity (used in a few odd places) +origin vec3_t origin of the entity +renderfx int various drawing effects : + RF_MINLIGHT -can always see the entity + RF_VIEWERMODEL -don't let the player see this (himself) + RF_WEAPONMODEL -only let the current player see this + RF_FULLBRIGHT -entity always fully lit + RF_DEPTHHACK -for view weapon Z crunching (?!) + RF_TRANSLUCENT -entity is see through + RF_FRAMELERP -? used by monsters and bodies + RF_BEAM -laser beam + RF_CUSTOMSKIN -skin is an index in image_precache + RF_GLOW -pulse lighting for bonus items + RF_SHELL_RED -red glow, when monsters are resurrecting + RF_SHELL_GREEN -green glow, from power shield + RF_SHELL_BLUE -blue glow, not currently used +skinnum int current skin number +solid int set by gi.linkentity, for client-side prediction +sound int to gaurentee shut-off of looping sounds + + + + +CONTENTS_SOLID solid wall (not windows) +CONTENTS_WINDOW windows +CONTENTS_AUX ? +CONTENTS_LAVA err.. lava +CONTENTS_SLIME slime +CONTENTS_WATER water +CONTENTS_MIST !!Unused!! +LAST_VISIBLE_CONTENTS ? +CONTENTS_AREAPORTAL portals to conserve memory used in map designing, also dont allow sounds to pass //kami0 +CONTENTS_PLAYERCLIP brush which player may not pass through //kami0 +CONTENTS_MONSTERCLIP brush where monsters may not pass through //kami0 +CONTENTS_CURRENT_0 flowing current moving at angle 0 //kami0 +CONTENTS_CURRENT_90 flowing current moving at angle 90 //kami0 +CONTENTS_CURRENT_180 flowing current moving at angle 180 //kami0 +CONTENTS_CURRENT_270 flowing current moving at angle 270 //kami0 +CONTENTS_CURRENT_UP flowing current moving up //kami0 +CONTENTS_CURRENT_DOWN flowing current moving down //kami0 +CONTENTS_ORIGIN used for rotation, invisible //kami0 +CONTENTS_MONSTER non-solid monster? +CONTENTS_DEADMONSTER dead monster +CONTENTS_DETAIL brush that is not passed to vis - not in final BSP ? +CONTENTS_TRANSLUCENT see through +CONTENTS_LADDER ladder + +MASK_ALL -stop on anything +MASK_SOLID -walls/windows +MASK_PLAYERSOLID -anything you'd expect a player to stop on +MASK_DEADSOLID -same as above, can go through monsters +MASK_MONSTERSOLID -anything you'd expect a monster to stop on +MASK_WATER -any liquid +MASK_OPAQUE -walls and liquid except water (which is see-through) +MASK_SHOT -walls, monsters and dead monsters +MASK_CURRENT -flowing brush + +Written by Davo ([email protected]) +(parts marked //kami0 supplied by Michael 'kami0' DiGiovanni ([email protected])) + +If there are any corrections, bugs etc, please e-mail me. + +Please also note that this has been the result of searching through the c files supplied by +iD, and I don't have reference to any official documents or anything, so don't assume I know +what I'm talking about ;).
\ No newline at end of file |