Exemple #1
0
//
// V_DrawBackground
//
//
void V_DrawBackground(const char *patchname, VBuffer *back_dest)
{
   int         tnum = R_FindFlat(patchname) - flatstart;
   byte        *src;
   
   // SoM: Extra protection, I don't think this should ever actually happen.
   if(tnum < 0 || tnum >= numflats)   
      src = R_GetLinearBuffer(badtex);
   else
      src = (byte *)(wGlobalDir.cacheLumpNum(firstflat + tnum, PU_CACHE));

   back_dest->TileBlock64(back_dest, src);
}
Exemple #2
0
//
// V_DrawDistortedBackground
//
// As above, but uses the ultra-cool water warping effect.
// Created by fraggle.
//
void V_DrawDistortedBackground(const char *patchname, VBuffer *back_dest)
{
   byte *src = R_DistortedFlat(R_FindFlat(patchname));
   
   back_dest->TileBlock64(back_dest, src);
}
Exemple #3
0
//
// Loads sectors
//
void UDMFParser::loadSectors(UDMFSetupSettings &setupSettings) const
{
   numsectors = (int)mSectors.getLength();
   sectors = estructalloctag(sector_t, numsectors, PU_LEVEL);

   for(int i = 0; i < numsectors; ++i)
   {
      sector_t *ss = sectors + i;
      const USector &us = mSectors[i];

      if(mNamespace == namespace_Eternity)
      {
         // These two pass the fixed_t value now
         ss->floorheight = us.heightfloor;
         ss->ceilingheight = us.heightceiling;

         // New to Eternity
         ss->floor_xoffs = us.xpanningfloor;
         ss->floor_yoffs = us.ypanningfloor;
         ss->ceiling_xoffs = us.xpanningceiling;
         ss->ceiling_yoffs = us.ypanningceiling;
         ss->floorbaseangle = static_cast<float>
            (E_NormalizeFlatAngle(us.rotationfloor) *  PI / 180.0f);
         ss->ceilingbaseangle = static_cast<float>
            (E_NormalizeFlatAngle(us.rotationceiling) *  PI / 180.0f);

         // Flags
         ss->flags |= us.secret ? SECF_SECRET : 0;

         // Friction: set the parameter directly from UDMF
         if(us.friction >= 0)   // default: -1
         {
            int friction, movefactor;
            P_CalcFriction(us.friction, friction, movefactor);

            ss->flags |= SECF_FRICTION;   // add the flag too
            ss->friction = friction;
            ss->movefactor = movefactor;
         }

         // Damage
         ss->damage = us.damageamount;
         ss->damagemask = us.damageinterval;
         ss->damagemod = E_DamageTypeNumForName(us.damagetype.constPtr());
         // If the following flags are true for the current sector, then set the
         // appropriate damageflags to true, otherwise don't set them.
         ss->damageflags |= us.damage_endgodmode ? SDMG_ENDGODMODE : 0;
         ss->damageflags |= us.damage_exitlevel ? SDMG_EXITLEVEL : 0;
         ss->damageflags |= us.damageterraineffect ? SDMG_TERRAINHIT : 0;
         ss->leakiness = eclamp(us.leakiness, 0, 256);

         // Terrain types
         if(us.floorterrain.strCaseCmp(DEFAULT_flat))
            ss->floorterrain = E_TerrainForName(us.floorterrain.constPtr());
         if (us.ceilingterrain.strCaseCmp(DEFAULT_flat))
            ss->ceilingterrain = E_TerrainForName(us.ceilingterrain.constPtr());

         // Lights
         ss->floorlightdelta = static_cast<int16_t>(us.lightfloor);
         ss->ceilinglightdelta = static_cast<int16_t>(us.lightceiling);
         ss->flags |=
         (us.lightfloorabsolute ? SECF_FLOORLIGHTABSOLUTE : 0) |
         (us.lightceilingabsolute ? SECF_CEILLIGHTABSOLUTE : 0);

         // sector colormaps
         ss->topmap = ss->midmap = ss->bottommap = -1; // mark as not specified

      }
      else
      {
         ss->floorheight = us.heightfloor << FRACBITS;
         ss->ceilingheight = us.heightceiling << FRACBITS;
      }
      ss->floorpic = R_FindFlat(us.texturefloor.constPtr());
      P_SetSectorCeilingPic(ss,
                            R_FindFlat(us.textureceiling.constPtr()));
      ss->lightlevel = us.lightlevel;
      ss->special = us.special;
      ss->tag = us.identifier;
      P_InitSector(ss);

      //
      // HERE GO THE PROPERTIES THAT MUST TAKE EFFECT AFTER P_InitSector
      //
      if(mNamespace == namespace_Eternity)
      {
         if(us.colormaptop.strCaseCmp(DEFAULT_default))
         {
            ss->topmap    = R_ColormapNumForName(us.colormaptop.constPtr());
            setupSettings.setSectorFlag(i, UDMF_SECTOR_INIT_COLORMAPPED);
         }
         if(us.colormapmid.strCaseCmp(DEFAULT_default))
         {
            ss->midmap    = R_ColormapNumForName(us.colormapmid.constPtr());
            setupSettings.setSectorFlag(i, UDMF_SECTOR_INIT_COLORMAPPED);
         }
         if(us.colormapbottom.strCaseCmp(DEFAULT_default))
         {
            ss->bottommap = R_ColormapNumForName(us.colormapbottom.constPtr());
            setupSettings.setSectorFlag(i, UDMF_SECTOR_INIT_COLORMAPPED);
         }

         // Portal fields
         // Floors
         ss->f_pflags |= us.portal_floor_alpha << PO_OPACITYSHIFT;
         ss->f_pflags |= us.portal_floor_blocksound ? PF_BLOCKSOUND : 0;
         ss->f_pflags |= us.portal_floor_disabled ? PF_DISABLED : 0;
         ss->f_pflags |= us.portal_floor_nopass ? PF_NOPASS : 0;
         ss->f_pflags |= us.portal_floor_norender ? PF_NORENDER : 0;
         if(!us.portal_floor_overlaytype.strCaseCmp(RENDERSTYLE_translucent))
            ss->f_pflags |= PS_OVERLAY;
         else if(!us.portal_floor_overlaytype.strCaseCmp(RENDERSTYLE_add))
            ss->f_pflags |= PS_OBLENDFLAGS; // PS_OBLENDFLAGS is PS_OVERLAY | PS_ADDITIVE
         ss->f_pflags |= us.portal_floor_useglobaltex ? PS_USEGLOBALTEX : 0;

         // Ceilings
         ss->c_pflags |= us.portal_ceil_alpha << PO_OPACITYSHIFT;
         ss->c_pflags |= us.portal_ceil_blocksound ? PF_BLOCKSOUND : 0;
         ss->c_pflags |= us.portal_ceil_disabled ? PF_DISABLED : 0;
         ss->c_pflags |= us.portal_ceil_nopass ? PF_NOPASS : 0;
         ss->c_pflags |= us.portal_ceil_norender ? PF_NORENDER : 0;
         if(!us.portal_ceil_overlaytype.strCaseCmp(RENDERSTYLE_translucent))
            ss->c_pflags |= PS_OVERLAY;
         else if(!us.portal_ceil_overlaytype.strCaseCmp(RENDERSTYLE_add))
            ss->c_pflags |= PS_OBLENDFLAGS; // PS_OBLENDFLAGS is PS_OVERLAY | PS_ADDITIVE
         ss->c_pflags |= us.portal_ceil_useglobaltex ? PS_USEGLOBALTEX : 0;
      }
   }
}