+ if(b1)
+ {
+ ed = (prvm_edict_t *) dBodyGetData(b1);
+ if(ed)
+ {
+ val = PRVM_EDICTFIELDVALUE(ed, prog->fieldoffsets.bouncefactor);
+ if (val!=0 && val->_float)
+ bouncefactor1 = val->_float;
+
+ val = PRVM_EDICTFIELDVALUE(ed, prog->fieldoffsets.bouncestop);
+ if (val!=0 && val->_float)
+ bouncestop1 = val->_float;
+ }
+ }
+
+ if(b2)
+ {
+ ed = (prvm_edict_t *) dBodyGetData(b2);
+ if(ed)
+ {
+ val = PRVM_EDICTFIELDVALUE(ed, prog->fieldoffsets.bouncefactor);
+ if (val!=0 && val->_float)
+ bouncefactor2 = val->_float;
+
+ val = PRVM_EDICTFIELDVALUE(ed, prog->fieldoffsets.bouncestop);
+ if (val!=0 && val->_float)
+ bouncestop2 = val->_float;
+ }
+ }
+
+ // merge bounce factors and bounce stop
+ if(bouncefactor2 > 0)
+ {
+ if(bouncefactor1 > 0)
+ {
+ // TODO possibly better logic to merge bounce factor data?
+ if(bouncestop2 < bouncestop1)
+ bouncestop1 = bouncestop2;
+ if(bouncefactor2 > bouncefactor1)
+ bouncefactor1 = bouncefactor2;
+ }
+ else
+ {
+ bouncestop1 = bouncestop2;
+ bouncefactor1 = bouncefactor2;
+ }
+ }
+ dWorldGetGravity(world->physics.ode_world, grav);
+ bouncestop1 *= fabs(grav[2]);
+