Annotation of doom/p_ceilng.c, revision 1.1.1.1

1.1       root        1: #include "doomdef.h"
                      2: #include "p_local.h"
                      3: 
                      4: /*================================================================== */
                      5: /*================================================================== */
                      6: /* */
                      7: /*                                                     CEILINGS */
                      8: /* */
                      9: /*================================================================== */
                     10: /*================================================================== */
                     11: 
                     12: ceiling_t      *activeceilings[MAXCEILINGS];
                     13: 
                     14: /*================================================================== */
                     15: /* */
                     16: /*     T_MoveCeiling */
                     17: /* */
                     18: /*================================================================== */
                     19: void T_MoveCeiling (ceiling_t *ceiling)
                     20: {
                     21:        result_e        res;
                     22:        
                     23:        switch(ceiling->direction)
                     24:        {
                     25:                case 0:         /* IN STASIS */
                     26:                        break;
                     27:                case 1:         /* UP */
                     28:                        res = T_MovePlane(ceiling->sector,ceiling->speed,
                     29:                                        ceiling->topheight,false,1,ceiling->direction);
                     30:                        if (!(gametic&7))
                     31:                                S_StartSound((mobj_t *)&ceiling->sector->soundorg,sfx_stnmov);
                     32:                        if (res == pastdest)
                     33:                                switch(ceiling->type)
                     34:                                {
                     35:                                        case raiseToHighest:
                     36:                                                P_RemoveActiveCeiling(ceiling);
                     37:                                                break;
                     38:                                        case fastCrushAndRaise:
                     39:                                        case crushAndRaise:
                     40:                                                ceiling->direction = -1;
                     41:                                                break;
                     42:                                        default:
                     43:                                                break;
                     44:                                }
                     45:                        break;
                     46:                case -1:        /* DOWN */
                     47:                        res = T_MovePlane(ceiling->sector,ceiling->speed,
                     48:                                ceiling->bottomheight,ceiling->crush,1,ceiling->direction);
                     49:                        if (!(gametic&7))
                     50:                                S_StartSound((mobj_t *)&ceiling->sector->soundorg,sfx_stnmov);
                     51:                        if (res == pastdest)
                     52:                                switch(ceiling->type)
                     53:                                {
                     54:                                        case crushAndRaise:
                     55:                                                ceiling->speed = CEILSPEED;
                     56:                                        case fastCrushAndRaise:
                     57:                                                ceiling->direction = 1;
                     58:                                                break;
                     59:                                        case lowerAndCrush:
                     60:                                        case lowerToFloor:
                     61:                                                P_RemoveActiveCeiling(ceiling);
                     62:                                                break;
                     63:                                        default:
                     64:                                                break;
                     65:                                }
                     66:                        else
                     67:                        if (res == crushed)
                     68:                                switch(ceiling->type)
                     69:                                {
                     70:                                        case crushAndRaise:
                     71:                                        case lowerAndCrush:
                     72:                                                ceiling->speed = CEILSPEED / 8;
                     73:                                                break;
                     74:                                        default:
                     75:                                                break;
                     76:                                }
                     77:                        break;
                     78:        }
                     79: }
                     80: 
                     81: /*================================================================== */
                     82: /* */
                     83: /*             EV_DoCeiling */
                     84: /*             Move a ceiling up/down and all around! */
                     85: /* */
                     86: /*================================================================== */
                     87: int EV_DoCeiling (line_t *line, ceiling_e  type)
                     88: {
                     89:        int                     secnum,rtn;
                     90:        sector_t                *sec;
                     91:        ceiling_t               *ceiling;
                     92:        
                     93:        secnum = -1;
                     94:        rtn = 0;
                     95:        
                     96:        /* */
                     97:        /*      Reactivate in-stasis ceilings...for certain types. */
                     98:        /* */
                     99:        switch(type)
                    100:        {
                    101:                case fastCrushAndRaise:
                    102:                case crushAndRaise:
                    103:                        P_ActivateInStasisCeiling(line);
                    104:                default:
                    105:                        break;
                    106:        }
                    107:        
                    108:        while ((secnum = P_FindSectorFromLineTag(line,secnum)) >= 0)
                    109:        {
                    110:                sec = &sectors[secnum];
                    111:                if (sec->specialdata)
                    112:                        continue;
                    113:                
                    114:                /* */
                    115:                /* new door thinker */
                    116:                /* */
                    117:                rtn = 1;
                    118:                ceiling = Z_Malloc (sizeof(*ceiling), PU_LEVSPEC, 0);
                    119:                P_AddThinker (&ceiling->thinker);
                    120:                sec->specialdata = ceiling;
                    121:                ceiling->thinker.function = T_MoveCeiling;
                    122:                ceiling->sector = sec;
                    123:                ceiling->crush = false;
                    124:                switch(type)
                    125:                {
                    126:                        case fastCrushAndRaise:
                    127:                                ceiling->crush = true;
                    128:                                ceiling->topheight = sec->ceilingheight;
                    129:                                ceiling->bottomheight = sec->floorheight;
                    130:                                ceiling->direction = -1;
                    131:                                ceiling->speed = CEILSPEED * 2;
                    132:                                break;
                    133:                        case crushAndRaise:
                    134:                                ceiling->crush = true;
                    135:                                ceiling->topheight = sec->ceilingheight;
                    136:                        case lowerAndCrush:
                    137:                        case lowerToFloor:
                    138:                                ceiling->bottomheight = sec->floorheight;
                    139:                                ceiling->direction = -1;
                    140:                                ceiling->speed = CEILSPEED;
                    141:                                break;
                    142:                        case raiseToHighest:
                    143:                                ceiling->topheight = P_FindHighestCeilingSurrounding(sec);
                    144:                                ceiling->direction = 1;
                    145:                                ceiling->speed = CEILSPEED;
                    146:                                break;
                    147:                }
                    148:                
                    149:                ceiling->tag = sec->tag;
                    150:                ceiling->type = type;
                    151:                P_AddActiveCeiling(ceiling);
                    152:        }
                    153:        return rtn;
                    154: }
                    155: 
                    156: /*================================================================== */
                    157: /* */
                    158: /*             Add an active ceiling */
                    159: /* */
                    160: /*================================================================== */
                    161: void P_AddActiveCeiling(ceiling_t *c)
                    162: {
                    163:        int             i;
                    164:        for (i = 0; i < MAXCEILINGS;i++)
                    165:                if (activeceilings[i] == NULL)
                    166:                {
                    167:                        activeceilings[i] = c;
                    168:                        return;
                    169:                }
                    170: }
                    171: 
                    172: /*================================================================== */
                    173: /* */
                    174: /*             Remove a ceiling's thinker */
                    175: /* */
                    176: /*================================================================== */
                    177: void P_RemoveActiveCeiling(ceiling_t *c)
                    178: {
                    179:        int             i;
                    180:        
                    181:        for (i = 0;i < MAXCEILINGS;i++)
                    182:                if (activeceilings[i] == c)
                    183:                {
                    184:                        activeceilings[i]->sector->specialdata = NULL;
                    185:                        P_RemoveThinker (&activeceilings[i]->thinker);
                    186:                        activeceilings[i] = NULL;
                    187:                        break;
                    188:                }
                    189: }
                    190: 
                    191: /*================================================================== */
                    192: /* */
                    193: /*             Restart a ceiling that's in-stasis */
                    194: /* */
                    195: /*================================================================== */
                    196: void P_ActivateInStasisCeiling(line_t *line)
                    197: {
                    198:        int     i;
                    199:        
                    200:        for (i = 0;i < MAXCEILINGS;i++)
                    201:                if (activeceilings[i] && (activeceilings[i]->tag == line->tag) &&
                    202:                        (activeceilings[i]->direction == 0))
                    203:                {
                    204:                        activeceilings[i]->direction = activeceilings[i]->olddirection;
                    205:                        activeceilings[i]->thinker.function = T_MoveCeiling;
                    206:                }
                    207: }
                    208: 
                    209: /*================================================================== */
                    210: /* */
                    211: /*             EV_CeilingCrushStop */
                    212: /*             Stop a ceiling from crushing! */
                    213: /* */
                    214: /*================================================================== */
                    215: int    EV_CeilingCrushStop(line_t      *line)
                    216: {
                    217:        int             i;
                    218:        int             rtn;
                    219:        
                    220:        rtn = 0;
                    221:        for (i = 0;i < MAXCEILINGS;i++)
                    222:                if (activeceilings[i] && (activeceilings[i]->tag == line->tag) &&
                    223:                        (activeceilings[i]->direction != 0))
                    224:                {
                    225:                        activeceilings[i]->olddirection = activeceilings[i]->direction;
                    226:                        activeceilings[i]->thinker.function = NULL;
                    227:                        activeceilings[i]->direction = 0;               /* in-stasis */
                    228:                        rtn = 1;
                    229:                }
                    230: 
                    231:        return rtn;
                    232: }

unix.superglobalmegacorp.com

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