// // 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); }
// // 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); }
// // 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; } } }