Annotation of doom/p_telept.c, revision 1.1.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.