| 93 | 
  | 
                                colval(ro->cext,RED) : colval(ro->cext,GRN); | 
| 94 | 
  | 
                if (colval(ro->cext,BLU) < re) re = colval(ro->cext,BLU); | 
| 95 | 
  | 
                re *= ro->rot; | 
| 96 | 
< | 
                if (re > .1) | 
| 97 | 
< | 
                        r->rweight *= exp(-re); | 
| 96 | 
> | 
                if (re > 0.1) | 
| 97 | 
> | 
                        if (re > 92.) | 
| 98 | 
> | 
                                r->rweight = 0.0; | 
| 99 | 
> | 
                        else | 
| 100 | 
> | 
                                r->rweight *= exp(-re); | 
| 101 | 
  | 
        } | 
| 102 | 
  | 
        rayclear(r); | 
| 103 | 
+ | 
        if (r->rweight <= 0.0)                  /* check for expiration */ | 
| 104 | 
+ | 
                return(-1); | 
| 105 | 
  | 
        if (r->crtype & SHADOW)                 /* shadow commitment */ | 
| 106 | 
  | 
                return(0); | 
| 107 | 
  | 
        if (maxdepth <= 0 && rc != NULL) {      /* Russian roulette */ | 
| 111 | 
  | 
                        return(-1);             /* upper reflection limit */ | 
| 112 | 
  | 
                if (r->rweight >= minweight) | 
| 113 | 
  | 
                        return(0); | 
| 114 | 
< | 
                if (frandom() < r->rweight/minweight) | 
| 114 | 
> | 
                if (frandom() > r->rweight/minweight) | 
| 115 | 
  | 
                        return(-1); | 
| 116 | 
  | 
                rw = minweight/r->rweight;      /* promote survivor */ | 
| 117 | 
  | 
                scalecolor(r->rcoef, rw); | 
| 301 | 
  | 
        foremat = backmat = 0; | 
| 302 | 
  | 
                                        /* foreground */ | 
| 303 | 
  | 
        fr = *r; | 
| 304 | 
< | 
        if (coef > FTINY) | 
| 304 | 
> | 
        if (coef > FTINY) { | 
| 305 | 
> | 
                scalecolor(fr.rcoef, coef); | 
| 306 | 
  | 
                foremat = rayshade(&fr, fore); | 
| 307 | 
+ | 
        } | 
| 308 | 
  | 
                                        /* background */ | 
| 309 | 
  | 
        br = *r; | 
| 310 | 
< | 
        if (coef < 1.0-FTINY) | 
| 310 | 
> | 
        if (coef < 1.0-FTINY) { | 
| 311 | 
> | 
                scalecolor(br.rcoef, 1.0-coef); | 
| 312 | 
  | 
                backmat = rayshade(&br, back); | 
| 313 | 
+ | 
        } | 
| 314 | 
  | 
                                        /* check for transparency */ | 
| 315 | 
  | 
        if (backmat ^ foremat) { | 
| 316 | 
  | 
                if (backmat && coef > FTINY) | 
| 377 | 
  | 
        } | 
| 378 | 
  | 
        for (i = 3; i--; ) | 
| 379 | 
  | 
                rc[i] *= (eext[i] <= FTINY) ? 1. : | 
| 380 | 
< | 
                                (eext[i] > 300.) ? 0. : exp(-eext[i]); | 
| 380 | 
> | 
                                (eext[i] > 92.) ? 0. : exp(-eext[i]); | 
| 381 | 
  | 
} | 
| 382 | 
  | 
 | 
| 383 | 
  | 
 |