📄 p_mobj.h
字号:
// Emacs style mode select -*- C++ -*- //-----------------------------------------------------------------------------//// $Id: p_mobj.h,v 1.2 2003/09/08 22:34:29 jasonk Exp $//// Copyright (C) 1993-1996 by id Software, Inc.//// This source is available for distribution and/or modification// only under the terms of the DOOM Source Code License as// published by id Software. All rights reserved.//// The source is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License// for more details.//// DESCRIPTION:// Map Objects, MObj, definition and handling.////-----------------------------------------------------------------------------#ifndef __P_MOBJ__#define __P_MOBJ__// Basics.#include "tables.h"#include "m_fixed.h"// We need the thinker_t stuff.#include "d_think.h"// We need the WAD data structure for Map things,// from the THINGS lump.#include "doomdata.h"// States are tied to finite states are// tied to animation frames.// Needs precompiled tables/data structures.#include "info.h"#ifdef __GNUG__#pragma interface#endif//// NOTES: mobj_t//// mobj_ts are used to tell the refresh where to draw an image,// tell the world simulation when objects are contacted,// and tell the sound driver how to position a sound.//// The refresh uses the next and prev links to follow// lists of things in sectors as they are being drawn.// The sprite, frame, and angle elements determine which patch_t// is used to draw the sprite if it is visible.// The sprite and frame values are allmost allways set// from state_t structures.// The statescr.exe utility generates the states.h and states.c// files that contain the sprite/frame numbers from the// statescr.txt source file.// The xyz origin point represents a point at the bottom middle// of the sprite (between the feet of a biped).// This is the default origin position for patch_ts grabbed// with lumpy.exe.// A walking creature will have its z equal to the floor// it is standing on.//// The sound code uses the x,y, and subsector fields// to do stereo positioning of any sound effited by the mobj_t.//// The play simulation uses the blocklinks, x,y,z, radius, height// to determine when mobj_ts are touching each other,// touching lines in the map, or hit by trace lines (gunshots,// lines of sight, etc).// The mobj_t->flags element has various bit flags// used by the simulation.//// Every mobj_t is linked into a single sector// based on its origin coordinates.// The subsector_t is found with R_PointInSubsector(x,y),// and the sector_t can be found with subsector->sector.// The sector links are only used by the rendering code,// the play simulation does not care about them at all.//// Any mobj_t that needs to be acted upon by something else// in the play world (block movement, be shot, etc) will also// need to be linked into the blockmap.// If the thing has the MF_NOBLOCK flag set, it will not use// the block links. It can still interact with other things,// but only as the instigator (missiles will run into other// things, but nothing can run into a missile).// Each block in the grid is 128*128 units, and knows about// every line_t that it contains a piece of, and every// interactable mobj_t that has its origin contained. //// A valid mobj_t is a mobj_t that has the proper subsector_t// filled in for its xy coordinates and is linked into the// sector from which the subsector was made, or has the// MF_NOSECTOR flag set (the subsector_t needs to be valid// even if MF_NOSECTOR is set), and is linked into a blockmap// block or has the MF_NOBLOCKMAP flag set.// Links should only be modified by the P_[Un]SetThingPosition()// functions.// Do not change the MF_NO? flags while a thing is valid.//// Any questions?////// Misc. mobj flags//typedef enum{ // Call P_SpecialThing when touched. MF_SPECIAL = 1, // Blocks. MF_SOLID = 2, // Can be hit. MF_SHOOTABLE = 4, // Don't use the sector links (invisible but touchable). MF_NOSECTOR = 8, // Don't use the blocklinks (inert but displayable) MF_NOBLOCKMAP = 16, // Not to be activated by sound, deaf monster. MF_AMBUSH = 32, // Will try to attack right back. MF_JUSTHIT = 64, // Will take at least one step before attacking. MF_JUSTATTACKED = 128, // On level spawning (initial position), // hang from ceiling instead of stand on floor. MF_SPAWNCEILING = 256, // Don't apply gravity (every tic), // that is, object will float, keeping current height // or changing it actively. MF_NOGRAVITY = 512, // Movement flags. // This allows jumps from high places. MF_DROPOFF = 0x400, // For players, will pick up items. MF_PICKUP = 0x800, // Player cheat. ??? MF_NOCLIP = 0x1000, // Player: keep info about sliding along walls. MF_SLIDE = 0x2000, // Allow moves to any height, no gravity. // For active floaters, e.g. cacodemons, pain elementals. MF_FLOAT = 0x4000, // Don't cross lines // ??? or look at heights on teleport. MF_TELEPORT = 0x8000, // Don't hit same species, explode on block. // Player missiles as well as fireballs of various kinds. MF_MISSILE = 0x10000, // Dropped by a demon, not level spawned. // E.g. ammo clips dropped by dying former humans. MF_DROPPED = 0x20000, // Use fuzzy draw (shadow demons or spectres), // temporary player invisibility powerup. MF_SHADOW = 0x40000, // Flag: don't bleed when shot (use puff), // barrels and shootable furniture shall not bleed. MF_NOBLOOD = 0x80000, // Don't stop moving halfway off a step, // that is, have dead bodies slide down all the way. MF_CORPSE = 0x100000, // Floating to a height for a move, ??? // don't auto float to target's height. MF_INFLOAT = 0x200000, // On kill, count this enemy object // towards intermission kill total. // Happy gathering. MF_COUNTKILL = 0x400000, // On picking up, count this item object // towards intermission item total. MF_COUNTITEM = 0x800000, // Special handling: skull in flight. // Neither a cacodemon nor a missile. MF_SKULLFLY = 0x1000000, // Don't spawn this object // in death match mode (e.g. key cards). MF_NOTDMATCH = 0x2000000, // Player sprites in multiplayer modes are modified // using an internal color lookup table for re-indexing. // If 0x4 0x8 or 0xc, // use a translation table for player colormaps MF_TRANSLATION = 0xc000000, // Hmm ???. MF_TRANSSHIFT = 26} mobjflag_t;// Map Object definition.typedef struct mobj_s{ // List: thinker links. thinker_t thinker; // Info for drawing: position. fixed_t x; fixed_t y; fixed_t z; // More list: links in sector (if needed) struct mobj_s* snext; struct mobj_s* sprev; //More drawing info: to determine current sprite. angle_t angle; // orientation spritenum_t sprite; // used to find patch_t and flip value int frame; // might be ORed with FF_FULLBRIGHT // Interaction info, by BLOCKMAP. // Links in blocks (if needed). struct mobj_s* bnext; struct mobj_s* bprev; struct subsector_s* subsector; // The closest interval over all contacted Sectors. fixed_t floorz; fixed_t ceilingz; // For movement checking. fixed_t radius; fixed_t height; // Momentums, used to update position. fixed_t momx; fixed_t momy; fixed_t momz; // If == validcount, already checked. int validcount; mobjtype_t type; mobjinfo_t* info; // &mobjinfo[mobj->type] int tics; // state tic counter state_t* state; int flags; int health; // Movement direction, movement generation (zig-zagging). int movedir; // 0-7 int movecount; // when 0, select a new dir // Thing being chased/attacked (or NULL), // also the originator for missiles. struct mobj_s* target; // Reaction time: if non 0, don't attack yet. // Used by player to freeze a bit after teleporting. int reactiontime; // If >0, the target will be chased // no matter what (even if shot) int threshold; // Additional info record for player avatars only. // Only valid if type == MT_PLAYER struct player_s* player; // Player number last looked for. int lastlook; // For nightmare respawn. mapthing_t spawnpoint; // Thing being chased/attacked for tracers. struct mobj_s* tracer; } mobj_t;#endif//-----------------------------------------------------------------------------//// $Log: p_mobj.h,v $// Revision 1.2 2003/09/08 22:34:29 jasonk// Updated files because this fucker won't build for no fucking good reason.//// Revision 1.1.1.1 2003/09/04 21:08:13 jasonk// Initial import//// Revision 1.1 2000/12/08 21:07:53 jeffw// nxdoom initial entry -- No nxdoom/Makefile so it won't build automatically//////-----------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -