Annotation of doom/p_telept.c, revision 1.1

1.1     ! root        1: #include "doomdef.h"
        !             2: #include "p_local.h"
        !             3: 
        !             4: 
        !             5: /*
        !             6: ==============
        !             7: =
        !             8: = P_Telefrag
        !             9: =
        !            10: = Kill all monsters around the given spot
        !            11: =
        !            12: ==============
        !            13: */
        !            14: 
        !            15: void P_Telefrag (mobj_t *thing, fixed_t x, fixed_t y)
        !            16: {
        !            17:        int             delta;
        !            18:        int             size;
        !            19:        mobj_t  *m;
        !            20:        
        !            21:        for (m=mobjhead.next ; m != &mobjhead ; m=m->next)
        !            22:        {
        !            23:                if (!(m->flags & MF_SHOOTABLE) )
        !            24:                        continue;               /* not shootable */
        !            25:                size = m->radius + thing->radius + 4*FRACUNIT;
        !            26:                delta = m->x - x;
        !            27:                if (delta < - size || delta > size)
        !            28:                        continue;
        !            29:                delta = m->y - y;
        !            30:                if (delta < -size || delta > size)
        !            31:                        continue;
        !            32:                P_DamageMobj (m, thing, thing, 10000);
        !            33:                m->flags &= ~(MF_SOLID|MF_SHOOTABLE);
        !            34:        }
        !            35: }
        !            36: 
        !            37: 
        !            38: /*================================================================== */
        !            39: /* */
        !            40: /*                                             TELEPORTATION */
        !            41: /* */
        !            42: /*================================================================== */
        !            43: int    EV_Teleport( line_t *line,mobj_t *thing )
        !            44: {
        !            45:        int             i;
        !            46:        int             tag;
        !            47:        boolean         flag;
        !            48:        mobj_t          *m,*fog;
        !            49:        unsigned        an;
        !            50:        sector_t        *sector;
        !            51:        fixed_t         oldx, oldy, oldz;
        !            52:        int             side;
        !            53:        
        !            54:        side = !P_PointOnLineSide (thing->x, thing->y, line);
        !            55:        
        !            56:        if (thing->flags & MF_MISSILE)
        !            57:                return 0;                       /* don't teleport missiles */
        !            58:                
        !            59:        if (side == 1)          /* don't teleport if hit back of line, */
        !            60:                return 0;               /* so you can get out of teleporter */
        !            61:        
        !            62:        tag = line->tag;
        !            63:        for (i = 0; i < numsectors; i++)
        !            64:                if (sectors[ i ].tag == tag )
        !            65:                {
        !            66:                        for (m=mobjhead.next ; m != &mobjhead ; m=m->next)
        !            67:                        {
        !            68:                                if (m->type != MT_TELEPORTMAN )
        !            69:                                        continue;               /* not a teleportman */
        !            70:                                sector = m->subsector->sector;
        !            71:                                if (sector-sectors != i )
        !            72:                                        continue;               /* wrong sector */
        !            73: 
        !            74:                                oldx = thing->x;
        !            75:                                oldy = thing->y;
        !            76:                                oldz = thing->z;
        !            77:                                thing->flags |= MF_TELEPORT;
        !            78:                                P_Telefrag (thing, m->x, m->y);
        !            79:                                flag = P_TryMove (thing, m->x, m->y);
        !            80:                                thing->flags &= ~MF_TELEPORT;
        !            81:                                if (!flag)
        !            82:                                        return 0;       /* move is blocked */
        !            83:                                thing->z = thing->floorz;
        !            84: /* spawn teleport fog at source and destination */
        !            85:                                fog = P_SpawnMobj (oldx, oldy, oldz, MT_TFOG);
        !            86:                                S_StartSound (fog, sfx_telept);
        !            87:                                an = m->angle >> ANGLETOFINESHIFT;
        !            88:                                fog = P_SpawnMobj (m->x+20*finecosine[an], m->y+20*finesine[an]
        !            89:                                        , thing->z, MT_TFOG);
        !            90:                                S_StartSound (fog, sfx_telept);
        !            91:                                if (thing->player)
        !            92:                                        thing->reactiontime = 18;       /* don't move for a bit */
        !            93:                                thing->angle = m->angle;
        !            94:                                thing->momx = thing->momy = thing->momz = 0;
        !            95:                                return 1;
        !            96:                        }       
        !            97:                }
        !            98:        return 0;
        !            99: }
        !           100: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.