⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 p_mobj.h

📁 The source code of Doom legacy for windows
💻 H
字号:
// Emacs style mode select   -*- C++ -*-//-----------------------------------------------------------------------------//// $Id: p_mobj.h,v 1.7 2001/02/24 13:35:20 bpereira Exp $//// Copyright (C) 1993-1996 by id Software, Inc.// Portions Copyright (C) 1998-2000 by DooM Legacy Team.//// This program is free software; you can redistribute it and/or// modify it under the terms of the GNU General Public License// as published by the Free Software Foundation; either version 2// of the License, or (at your option) any later version.//// This program is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the// GNU General Public License for more details.////// $Log: p_mobj.h,v $// Revision 1.7  2001/02/24 13:35:20  bpereira// no message//// Revision 1.6  2001/01/25 22:15:43  bpereira// added heretic support//// Revision 1.5  2000/11/02 17:50:08  stroggonmeth// Big 3Dfloors & FraggleScript commit!!//// Revision 1.4  2000/04/30 10:30:10  bpereira// no message//// Revision 1.3  2000/04/04 00:32:47  stroggonmeth// Initial Boom compatability plus few misc changes all around.//// Revision 1.2  2000/02/27 00:42:10  hurdler// fix CR+LF problem//// Revision 1.1.1.1  2000/02/22 20:32:32  hurdler// Initial import into CVS (v1.29 pr3)////// 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"//// 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          = 0x0001,    // Blocks.    MF_SOLID            = 0x0002,    // Can be hit.    MF_SHOOTABLE        = 0x0004,    // Don't use the sector links (invisible but touchable).    MF_NOSECTOR         = 0x0008,    // Don't use the blocklinks (inert but displayable)    MF_NOBLOCKMAP       = 0x0010,    // Not to be activated by sound, deaf monster.    MF_AMBUSH           = 0x0020,    // Will try to attack right back.    MF_JUSTHIT          = 0x0040,    // Will take at least one step before attacking.    MF_JUSTATTACKED     = 0x0080,    // On level spawning (initial position),    //  hang from ceiling instead of stand on floor.    MF_SPAWNCEILING     = 0x0100,    // Don't apply gravity (every tic),    //  that is, object will float, keeping current height    //  or changing it actively.    MF_NOGRAVITY        = 0x0200,    // Movement flags.    // This allows jumps from high places.    MF_DROPOFF          = 0x0400,    // For players, will pick up items.    MF_PICKUP           = 0x0800,    // 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,    // DOOM2: Use fuzzy draw (shadow demons or spectres),    //  temporary player invisibility powerup.    // LEGACY: no more for translucency, but still makes targeting harder    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      = 0x3C000000,    // 0xc000000, original 4color    // Hmm ???.    MF_TRANSSHIFT       = 26,    // for chase camera, don't be blocked by things (parsial cliping)    MF_NOCLIPTHING      = 0x40000000,    MF_FLOORHUGGER      = 0x80000000} mobjflag_t;typedef enum {    MF2_LOGRAV         =     0x00000001,      // alternate gravity setting    MF2_WINDTHRUST     =     0x00000002,      // gets pushed around by the wind                                              // specials    MF2_FLOORBOUNCE    =     0x00000004,      // bounces off the floor    MF2_THRUGHOST      =     0x00000008,      // missile will pass through ghosts    MF2_FLY            =     0x00000010,      // fly mode is active    MF2_FOOTCLIP       =     0x00000020,      // if feet are allowed to be clipped    MF2_SPAWNFLOAT     =     0x00000040,      // spawn random float z    MF2_NOTELEPORT     =     0x00000080,      // does not teleport    MF2_RIP            =     0x00000100,      // missile rips through solid                                              // targets    MF2_PUSHABLE       =     0x00000200,      // can be pushed by other moving                                              // mobjs    MF2_SLIDE          =     0x00000400,      // slides against walls    MF2_ONMOBJ         =     0x00000800,      // mobj is resting on top of another                                              // mobj    MF2_PASSMOBJ       =     0x00001000,      // Enable z block checking.  If on,                                              // this flag will allow the mobj to                                              // pass over/under other mobjs.    MF2_CANNOTPUSH     =     0x00002000,      // cannot push other pushable mobjs    MF2_FEETARECLIPPED =     0x00004000,      // a mobj's feet are now being cut    MF2_BOSS           =     0x00008000,      // mobj is a major boss    MF2_FIREDAMAGE     =     0x00010000,      // does fire damage    MF2_NODMGTHRUST    =     0x00020000,      // does not thrust target when                                              // damaging            MF2_TELESTOMP      =     0x00040000,      // mobj can stomp another    MF2_FLOATBOB       =     0x00080000,      // use float bobbing z movement    MF2_DONTDRAW       =     0X00100000,      // don't generate a vissprite        } mobjflag2_t;////  New mobj extra flags////added:28-02-98:typedef enum{    // The mobj stands on solid floor (not on another mobj or in air)    MF_ONGROUND          = 1,    // The mobj just hit the floor while falling, this is cleared on next frame    // (instant damage in lava/slime sectors to prevent jump cheat..)    MF_JUSTHITFLOOR      = 2,    // The mobj stands in a sector with water, and touches the surface    // this bit is set once and for all at the start of mobjthinker    MF_TOUCHWATER        = 4,    // The mobj stands in a sector with water, and his waist is BELOW the water surface    // (for player, allows swimming up/down)    MF_UNDERWATER        = 8,    // Set by P_MovePlayer() to disable gravity add in P_MobjThinker() ( for gameplay )    MF_SWIMMING          = 16,    // used for client prediction code, player can't be blocked in z by walls    // it is set temporarely when player follow the spirit    MF_NOZCHECKING       = 32,} mobjeflag_t;#if MAXSKINCOLOR > 16MAXSKINCOLOR have changedChange MF_TRANSLATION to take effect of the change#endif// 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;  // frame number, plus bits see p_pspr.h    //Fab:02-08-98    void*               skin;      // this one overrides 'sprite' when                                   // non NULL (currently hack for player                                   // bodies so they 'remember' the skin)                                   //                                   // secondary used when player die and                                   // play the die sound problem is he is                                   // already respawn and the corps play                                   // the sound !!! (he yeah it happens :\)    // 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 (or Things).    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                 eflags; //added:28-02-98: extra flags see above    int                 flags2; // heretic stuff    int                 special1;    int                 special2;    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 and itemrespawn respawn.    mapthing_t          *spawnpoint;    // Thing being chased/attacked for tracers.    struct mobj_s*      tracer;    //SoM: Friction.    int friction;    int movefactor;    // a linked list of sectors where this object appears    struct msecnode_s* touching_sectorlist;    // WARNING : new field are not automaticely added to save game } mobj_t;// check mobj against water content, before movement codevoid P_MobjCheckWater (mobj_t* mobj);void P_SpawnMapThing (mapthing_t*    mthing);void P_SpawnPlayer (mapthing_t* mthing);int P_HitFloor(mobj_t *thing);#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -