| 60 | 
  | 
                if (!issurface(o->otype) || o->omod == OVOID) | 
| 61 | 
  | 
                        continue; | 
| 62 | 
  | 
                                        /* find material */ | 
| 63 | 
< | 
                m = findmaterial(objptr(o->omod)); | 
| 63 | 
> | 
                m = findmaterial(o); | 
| 64 | 
  | 
                if (m == NULL) | 
| 65 | 
  | 
                        continue; | 
| 66 | 
  | 
                if (m->otype == MAT_CLIP) { | 
| 154 | 
  | 
                if ((o->otype != OBJ_SOURCE) | (o->omod == OVOID)) | 
| 155 | 
  | 
                        continue; | 
| 156 | 
  | 
                                        /* find material */ | 
| 157 | 
< | 
                m = findmaterial(objptr(o->omod)); | 
| 157 | 
> | 
                m = findmaterial(o); | 
| 158 | 
  | 
                if (m == NULL) | 
| 159 | 
  | 
                        continue; | 
| 160 | 
  | 
                if (!islight(m->otype)) | 
| 294 | 
  | 
 | 
| 295 | 
  | 
static int | 
| 296 | 
  | 
transillum(                     /* check if material is transparent illum */ | 
| 297 | 
< | 
        OBJECT  obj | 
| 297 | 
> | 
        OBJREC *m | 
| 298 | 
  | 
) | 
| 299 | 
  | 
{ | 
| 300 | 
< | 
        OBJREC *m = findmaterial(objptr(obj)); | 
| 301 | 
< | 
         | 
| 300 | 
> | 
        m = findmaterial(m); | 
| 301 | 
  | 
        if (m == NULL) | 
| 302 | 
  | 
                return(1); | 
| 303 | 
  | 
        if (m->otype != MAT_ILLUM) | 
| 330 | 
  | 
                 */ | 
| 331 | 
  | 
                if (2.*PI*(1. - DOT(source[i].sloc,r->rdir)) > source[i].ss2) | 
| 332 | 
  | 
                        continue; | 
| 333 | 
< | 
                                        /* is it the only possibility? */ | 
| 334 | 
< | 
                if (first == last) { | 
| 333 | 
> | 
                                        /* is it what we aimed for? */ | 
| 334 | 
> | 
                if (i == r->rsrc) { | 
| 335 | 
  | 
                        r->ro = source[i].so; | 
| 336 | 
  | 
                        break; | 
| 337 | 
  | 
                } | 
| 343 | 
  | 
                                glowsrc = i; | 
| 344 | 
  | 
                        continue; | 
| 345 | 
  | 
                } | 
| 346 | 
< | 
                if (transillum(source[i].so->omod)) { | 
| 346 | 
> | 
                if (transillum(source[i].so)) { | 
| 347 | 
  | 
                        if (transrc < 0) | 
| 348 | 
  | 
                                transrc = i; | 
| 349 | 
  | 
                        continue; | 
| 363 | 
  | 
                        return(0);      /* nothing usable */ | 
| 364 | 
  | 
        } | 
| 365 | 
  | 
        /* | 
| 366 | 
< | 
         * Make assignments. | 
| 366 | 
> | 
         * Assign object index | 
| 367 | 
  | 
         */ | 
| 368 | 
  | 
        r->robj = objndx(r->ro); | 
| 370 | 
– | 
        for (i = 0; i < 3; i++) | 
| 371 | 
– | 
                r->ron[i] = -r->rdir[i]; | 
| 372 | 
– | 
        r->rod = 1.0; | 
| 373 | 
– | 
        r->pert[0] = r->pert[1] = r->pert[2] = 0.0; | 
| 374 | 
– | 
        r->uv[0] = r->uv[1] = 0.0; | 
| 375 | 
– | 
        r->rox = NULL; | 
| 369 | 
  | 
        return(1); | 
| 370 | 
  | 
} | 
| 371 | 
  | 
 | 
| 470 | 
  | 
                                                /* compute number to check */ | 
| 471 | 
  | 
        nshadcheck = pow((double)ncnts, shadcert) + .5; | 
| 472 | 
  | 
                                                /* modify threshold */ | 
| 473 | 
< | 
        if (ncnts > MINSHADCNT) | 
| 481 | 
< | 
                ourthresh = shadthresh / r->rweight; | 
| 482 | 
< | 
        else | 
| 483 | 
< | 
                ourthresh = 0; | 
| 473 | 
> | 
        ourthresh = shadthresh / r->rweight; | 
| 474 | 
  | 
                                                /* test for shadows */ | 
| 475 | 
  | 
        for (nhits = 0, hwt = 0.0, sn = 0; sn < ncnts; | 
| 476 | 
  | 
                        hwt += (double)source[scp->sno].nhits / | 
| 477 | 
  | 
                                (double)source[scp->sno].ntests, | 
| 478 | 
  | 
                        sn++) { | 
| 479 | 
  | 
                                                /* check threshold */ | 
| 480 | 
< | 
                if ((sn+nshadcheck>=ncnts ? cntord[sn].brt : | 
| 480 | 
> | 
                if (sn >= MINSHADCNT && | 
| 481 | 
> | 
                            (sn+nshadcheck>=ncnts ? cntord[sn].brt : | 
| 482 | 
  | 
                                cntord[sn].brt-cntord[sn+nshadcheck].brt) | 
| 483 | 
< | 
                                < ourthresh*bright(r->rcol)) | 
| 483 | 
> | 
                                        < ourthresh*bright(r->rcol)) | 
| 484 | 
  | 
                        break; | 
| 485 | 
  | 
                scp = srccnt + cntord[sn].sndx; | 
| 486 | 
  | 
                                                /* test for hit */ | 
| 663 | 
  | 
 */ | 
| 664 | 
  | 
 | 
| 665 | 
  | 
static int | 
| 666 | 
< | 
weaksrcmat(OBJECT obj)          /* identify material */ | 
| 666 | 
> | 
weaksrcmat(OBJREC *m)           /* identify material */ | 
| 667 | 
  | 
{ | 
| 668 | 
< | 
        OBJREC *m = findmaterial(objptr(obj)); | 
| 678 | 
< | 
         | 
| 668 | 
> | 
        m = findmaterial(m); | 
| 669 | 
  | 
        if (m == NULL) return(0); | 
| 670 | 
  | 
        return((m->otype==MAT_ILLUM) | (m->otype==MAT_GLOW)); | 
| 671 | 
  | 
} | 
| 672 | 
  | 
 | 
| 673 | 
  | 
#define  illumblock(m, r)       (!(source[r->rsrc].sflags&SVIRTUAL) && \ | 
| 674 | 
  | 
                                r->rod > 0.0 && \ | 
| 675 | 
< | 
                                weaksrcmat(source[r->rsrc].so->omod)) | 
| 675 | 
> | 
                                weaksrcmat(source[r->rsrc].so)) | 
| 676 | 
  | 
 | 
| 677 | 
  | 
/* wrongsource * | 
| 678 | 
  | 
 * |