27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
const int PRECBITS = 12;
const float PRECF = 4096.0f;
int x = (int)(lx * PRECF);
int y = (int)(ly * PRECF);
int l = light.attr2 << PRECBITS;
int stepx = (int)(dx / (float)steps * PRECF);
int stepy = (int)(dy / (float)steps * PRECF);
int stepl =
fast_f2nat(l / (float)steps); // incorrect: light will fade quicker
// if near edge of the world
if (hasoverbright) {
l /= lightscale;
stepl /= lightscale;
// coloured light version, special case because most lights are
// white
if (light.attr3 || light.attr4) {
int dimness = rnd(
(255 -
(light.attr2 + light.attr3 + light.attr4) / 3) /
16 +
1);
x += stepx * dimness;
y += stepy * dimness;
if (OUTBORD(x >> PRECBITS, y >> PRECBITS))
return;
int g = light.attr3 << PRECBITS;
int stepg = fast_f2nat(g / (float)steps);
int b = light.attr4 << PRECBITS;
int stepb = fast_f2nat(b / (float)steps);
g /= lightscale;
stepg /= lightscale;
b /= lightscale;
stepb /= lightscale;
for (int i = 0; i < steps; i++) {
struct sqr *s = S(x >> PRECBITS, y >> PRECBITS);
int tl = (l >> PRECBITS) + s->r;
|
>
|
<
<
|
|
|
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
const int PRECBITS = 12;
const float PRECF = 4096.0f;
int x = (int)(lx * PRECF);
int y = (int)(ly * PRECF);
int l = light.attr2 << PRECBITS;
int stepx = (int)(dx / (float)steps * PRECF);
int stepy = (int)(dy / (float)steps * PRECF);
// incorrect: light will fade quicker if near edge of the world
int stepl = l / (float)steps;
if (hasoverbright) {
l /= lightscale;
stepl /= lightscale;
// coloured light version, special case because most lights are
// white
if (light.attr3 || light.attr4) {
int dimness = rnd(
(255 -
(light.attr2 + light.attr3 + light.attr4) / 3) /
16 +
1);
x += stepx * dimness;
y += stepy * dimness;
if (OUTBORD(x >> PRECBITS, y >> PRECBITS))
return;
int g = light.attr3 << PRECBITS;
int stepg = g / (float)steps;
int b = light.attr4 << PRECBITS;
int stepb = b / (float)steps;
g /= lightscale;
stepg /= lightscale;
b /= lightscale;
stepb /= lightscale;
for (int i = 0; i < steps; i++) {
struct sqr *s = S(x >> PRECBITS, y >> PRECBITS);
int tl = (l >> PRECBITS) + s->r;
|