From 27cc3d6289a6e1a8d26dfdb83eb430adf19e8d4e Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Thu, 21 Apr 2016 11:17:28 +0200 Subject: [PATCH] - fixed: ACS's GetActorLightLevel didn't check 3D floors. --- src/p_3dfloors.cpp | 2 +- src/p_acs.cpp | 21 ++++++++++++++++++++- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/p_3dfloors.cpp b/src/p_3dfloors.cpp index 393bcafa6..8da672513 100644 --- a/src/p_3dfloors.cpp +++ b/src/p_3dfloors.cpp @@ -723,7 +723,7 @@ lightlist_t * P_GetPlaneLight(sector_t * sector, secplane_t * plane, bool unders TArray &lightlist = sector->e->XFloor.lightlist; double planeheight=plane->ZatPoint(sector->centerspot); - if(underside) planeheight--; + if(underside) planeheight-= EQUAL_EPSILON; for(i = 1; i < lightlist.Size(); i++) if (lightlist[i].plane.ZatPoint(sector->centerspot) <= planeheight) diff --git a/src/p_acs.cpp b/src/p_acs.cpp index 27adce19e..83ef42b9a 100644 --- a/src/p_acs.cpp +++ b/src/p_acs.cpp @@ -9346,7 +9346,26 @@ scriptwait: AActor *actor = SingleActorFromTID(STACK(1), activator); if (actor != NULL) { - STACK(1) = actor->Sector->lightlevel; + sector_t *sector = actor->Sector; + if (sector->e->XFloor.lightlist.Size()) + { + unsigned i; + TArray &lightlist = sector->e->XFloor.lightlist; + + STACK(1) = *lightlist.Last().p_lightlevel; + for (i = 1; i < lightlist.Size(); i++) + { + if (lightlist[i].plane.ZatPoint(actor) <= actor->Z()) + { + STACK(1) = *lightlist[i - 1].p_lightlevel; + break; + } + } + } + else + { + STACK(1) = actor->Sector->lightlevel; + } } else STACK(1) = 0; break;