… | |
… | |
315 | |
315 | |
316 | return 0; |
316 | return 0; |
317 | } |
317 | } |
318 | |
318 | |
319 | /* radius, distance => lightness adjust */ |
319 | /* radius, distance => lightness adjust */ |
320 | static sint8 darkness[MAX_LIGHT_RADIUS * 2 + 1][MAX_LIGHT_RADIUS + 1]; |
320 | static sint8 darkness[MAX_LIGHT_RADIUS * 2 + 1][MAX_LIGHT_RADIUS * 3 / 2 + 1]; |
321 | |
321 | |
322 | static struct darkness_init |
322 | static struct darkness_init |
323 | { |
323 | { |
324 | darkness_init () |
324 | darkness_init () |
325 | { |
325 | { |
326 | for (int radius = -MAX_LIGHT_RADIUS; radius <= MAX_LIGHT_RADIUS; ++radius) |
326 | for (int radius = -MAX_LIGHT_RADIUS; radius <= MAX_LIGHT_RADIUS; ++radius) |
327 | for (int distance = 0; distance <= MAX_LIGHT_RADIUS; ++distance) |
327 | for (int distance = 0; distance <= MAX_LIGHT_RADIUS * 3 / 2; ++distance) |
328 | { |
328 | { |
329 | // max intensity |
329 | // max intensity |
330 | int intensity = min (MAX_DARKNESS_LOS, abs (radius) + 1); |
330 | int intensity = min (MAX_DARKNESS_LOS, abs (radius) + 1); |
331 | |
331 | |
332 | // actual intensity |
332 | // actual intensity |
333 | intensity = max (0, lerp_rd (distance, 0, abs (radius) + 1, intensity, 0)); |
333 | intensity = max (0, lerp_rd (distance, 0, abs (radius) + 1, intensity, 0)); |
334 | |
334 | |
335 | darkness [radius + MAX_LIGHT_RADIUS][distance] = radius < 0 |
335 | darkness [radius + MAX_LIGHT_RADIUS][distance] = radius < 0 |
336 | ? intensity |
336 | ? min (3, intensity) |
337 | : MAX_DARKNESS_LOS - intensity; |
337 | : MAX_DARKNESS_LOS - intensity; |
338 | } |
338 | } |
339 | } |
339 | } |
340 | } darkness_init; |
340 | } darkness_init; |
341 | |
341 | |