diff --git a/Source/lighting.cpp b/Source/lighting.cpp index 3dd391424..7583bdf62 100644 --- a/Source/lighting.cpp +++ b/Source/lighting.cpp @@ -565,8 +565,8 @@ void DoLighting(int nXPos, int nYPos, int nRadius, int Lnum) #ifdef HELLFIRE } else if (dLight[nXPos][nYPos] > lightradius[nRadius][0]) { dLight[nXPos][nYPos] = lightradius[nRadius][0]; - } #endif + } mult = xoff + 8*yoff; for (y = 0; y < min_y; y++) { @@ -915,6 +915,21 @@ void MakeLightTable() } tbl += 224; } +#ifdef HELLFIRE + if (currlevel >= 17) { + tbl = pLightTbl; + for (i = 0; i < lights; i++) { + *tbl++ = 0; + for (j = 1; j < 16; j++) + *tbl++ = j; + tbl += 240; + } + *tbl++ = 0; + for (j = 1; j < 16; j++) + *tbl++ = 1; + tbl += 240; + } +#endif trn = LoadFileInMem("PlrGFX\\Infra.TRN", NULL); for (i = 0; i < 256; i++) { @@ -954,27 +969,41 @@ void MakeLightTable() *tbl++ = 0; } - for (k = 0; k < 16; k++) { - for (l = 0; l < 128; l++) { - if (l > (k + 1) * 8) { - lightradius[k][l] = 15; + for (j = 0; j < 16; j++) { + for (i = 0; i < 128; i++) { + if (i > (j + 1) * 8) { + lightradius[j][i] = 15; } else { - lightradius[k][l] = l * 15.0 / ((k + 1) * 8.0) + 0.5; + fs = (double)15 * i / ((double)8 * (j + 1)); + lightradius[j][i] = (BYTE)(fs + 0.5); } } } - for (i = 0; i < 8; i++) { - for (j = 0; j < 8; j++) { +#ifdef HELLFIRE + if (currlevel >= 17) { + for (j = 0; j < 16; j++) { + fa = (sqrt((double)(16 - j))) / 128; + fa *= fa; + for (i = 0; i < 128; i++) { + lightradius[15 - j][i] = 15 - (BYTE)(fa * (double)((128 - i) * (128 - i))); + if (lightradius[15 - j][i] > 15) + lightradius[15 - j][i] = 0; + lightradius[15 - j][i] = lightradius[15 - j][i] - (BYTE)((15 - j) / 2); + if (lightradius[15 - j][i] > 15) + lightradius[15 - j][i] = 0; + } + } + } +#endif + for (j = 0; j < 8; j++) { + for (i = 0; i < 8; i++) { for (k = 0; k < 16; k++) { for (l = 0; l < 16; l++) { fs = (BYTE)sqrt((8 * l - j) * (8 * l - j) + (8 * k - i) * (8 * k - i)); - if (fs < 0.0) { - fa = -0.5; - } else { - fa = 0.5; - } - lightblock[i * 8 + j][k][l] = fs + fa; + fs += fs < 0 ? -0.5 : 0.5; + + lightblock[j * 8 + i][k][l] = fs; } } }