diff --git a/src/ObjLoading/Game/T6/BSP/BSPFlags.h b/src/ObjLoading/Game/T6/BSP/BSPFlags.h index 936c1863..0a5b8e41 100644 --- a/src/ObjLoading/Game/T6/BSP/BSPFlags.h +++ b/src/ObjLoading/Game/T6/BSP/BSPFlags.h @@ -52,7 +52,7 @@ namespace BSPFlags SURF_TYPE_ORIGIN, SURF_TYPE_SKY, SURF_TYPE_NOCASTSHADOW, - SURF_TYPE_ONLYCASTSHADOW, + SURF_TYPE_CASTSUNSHADOW, SURF_TYPE_PHYSICSGEOM, SURF_TYPE_LIGHTPORTAL, SURF_TYPE_CAULK, @@ -129,7 +129,7 @@ namespace BSPFlags {0, 0 }, // origin {4, 0x800 }, // sky {0x40000, 0 }, // noCastShadow - {0x80000, 0 }, // onlyCastShadow + {0x80000, 0 }, // castSunShadow {0, 0 }, // physicsGeom {0, 0 }, // lightPortal {0x1000, 0 }, // caulk @@ -175,7 +175,7 @@ namespace BSPFlags SURF_TYPE_CANSHOOTCLIP, SURF_TYPE_SKY, SURF_TYPE_NOCASTSHADOW, - SURF_TYPE_ONLYCASTSHADOW, + SURF_TYPE_CASTSUNSHADOW, SURF_TYPE_CAULK, SURF_TYPE_AREALIGHT, SURF_TYPE_SLICK, @@ -193,71 +193,18 @@ namespace BSPFlags SURF_TYPE_NODLIGHT, }; - constexpr const char* surfaceTypeToNameMap[SURF_TYPE_COUNT] = {"bark", - "brick", - "carpet", - "cloth", - "concrete", - "dirt", - "flesh", - "foliage", - "glass", - "grass", - "gravel", - "ice", - "metal", - "mud", - "paper", - "plaster", - "rock", - "sand", - "snow", - "water", - "wood", - "asphalt", - "ceramic", - "plastic", - "rubber", - "cushion", - "fruit", - "paintedmetal", - "player", - "tallgrass", - "riotshield", - "opaqueglass", - "clipmissile", - "ai_nosight", - "clipshot", - "playerclip", - "monsterclip", - "vehicleclip", - "itemclip", - "nodrop", - "nonsolid", - "detail", - "structural", - "portal", - "canshootclip", - "origin", - "sky", - "nocastshadow", - "onlycastshadow", - "physicsgeom", - "lightportal", - "caulk", - "arealight", - "slick", - "noimpact", - "nomarks", - "nopenetrate", - "ladder", - "nodamage", - "mantleon", - "mantleover", - "mount", - "nosteps", - "nodraw", - "noreceivedynamicshadow", - "nodlight", - "none"}; + constexpr const char* surfaceTypeToNameMap[SURF_TYPE_COUNT] = {"bark", "brick", "carpet", "cloth", "concrete", + "dirt", "flesh", "foliage", "glass", "grass", + "gravel", "ice", "metal", "mud", "paper", + "plaster", "rock", "sand", "snow", "water", + "wood", "asphalt", "ceramic", "plastic", "rubber", + "cushion", "fruit", "paintedmetal", "player", "tallgrass", + "riotshield", "opaqueglass", "clipmissile", "ai_nosight", "clipshot", + "playerclip", "monsterclip", "vehicleclip", "itemclip", "nodrop", + "nonsolid", "detail", "structural", "portal", "canshootclip", + "origin", "sky", "nocastshadow", "castshadow", "physicsgeom", + "lightportal", "caulk", "arealight", "slick", "noimpact", + "nomarks", "nopenetrate", "ladder", "nodamage", "mantleon", + "mantleover", "mount", "nosteps", "nodraw", "noreceivedynamicshadow", + "nodlight", "none"}; } // namespace BSPFlags diff --git a/src/ObjLoading/Game/T6/BSP/Linker/GfxWorldLinker.cpp b/src/ObjLoading/Game/T6/BSP/Linker/GfxWorldLinker.cpp index 60c77518..df787655 100644 --- a/src/ObjLoading/Game/T6/BSP/Linker/GfxWorldLinker.cpp +++ b/src/ObjLoading/Game/T6/BSP/Linker/GfxWorldLinker.cpp @@ -61,11 +61,6 @@ namespace BSP BSPSurface& bspSurface = bsp->gfxWorld.surfaces.at(surfIdx); GfxSurface* gfxSurface = &gfxWorld->dpvs.surfaces[surfIdx]; - gfxSurface->primaryLightIndex = BSPEditableConstants::DEFAULT_SURFACE_LIGHT; - gfxSurface->lightmapIndex = BSPEditableConstants::DEFAULT_SURFACE_LIGHTMAP; - gfxSurface->reflectionProbeIndex = BSPEditableConstants::DEFAULT_SURFACE_REFLECTION_PROBE; - gfxSurface->flags = BSPEditableConstants::DEFAULT_SURFACE_FLAGS; - gfxSurface->tris.triCount = bspSurface.triCount; gfxSurface->tris.baseIndex = bspSurface.indexOfFirstIndex; gfxSurface->tris.vertexCount = bspSurface.vertexCount; @@ -109,6 +104,20 @@ namespace BSP gfxSurface->tris.maxs.y = gfxSurface->bounds[1].y; gfxSurface->tris.maxs.z = gfxSurface->bounds[1].z; + gfxSurface->flags = 0; + if ((bspMaterial.contentFlags & BSPFlags::surfaceTypeToFlagMap[BSPFlags::SURF_TYPE_SKY].contentFlags) != 0) + gfxSurface->flags |= GFX_SURFACE_IS_SKY; + if ((bspMaterial.contentFlags & BSPFlags::surfaceTypeToFlagMap[BSPFlags::SURF_TYPE_NODRAW].contentFlags) != 0) + gfxSurface->flags |= GFX_SURFACE_NO_DRAW; + if ((bspMaterial.surfaceFlags & BSPFlags::surfaceTypeToFlagMap[BSPFlags::SURF_TYPE_CASTSUNSHADOW].surfaceFlags) != 0) + gfxSurface->flags |= GFX_SURFACE_CASTS_SUN_SHADOW; + if ((bspMaterial.surfaceFlags & BSPFlags::surfaceTypeToFlagMap[BSPFlags::SURF_TYPE_NOCASTSHADOW].surfaceFlags) == 0) + gfxSurface->flags |= GFX_SURFACE_CASTS_SHADOW; + + gfxSurface->primaryLightIndex = BSPEditableConstants::DEFAULT_SURFACE_LIGHT; + gfxSurface->lightmapIndex = BSPEditableConstants::DEFAULT_SURFACE_LIGHTMAP; + gfxSurface->reflectionProbeIndex = BSPEditableConstants::DEFAULT_SURFACE_REFLECTION_PROBE; + // unknown value gfxSurface->tris.himipRadiusInvSq = 0.0f; }