anchor.diff:  	
   	(when (member :rolling mode)
   	  
  -	  (setf (surface-parameters-rho params)
  +	  (setf rho
   		(* (surface-rho this) (surface-rho that)))
   	  
  -	  (setf (surface-parameters-rho2 params)
  +	  (setf rho2
   		(* (surface-rho2 this) (surface-rho2 that)))
   	  
  -	  (setf (surface-parameters-rhoN params)
  +	  (setf rhoN
   		(* (surface-rhoN this) (surface-rhoN that)))))
       params)
   
  
positive.code: 
  (defmethod combine-physics-objects ((this geometry) (that geometry) params)
  
      (with-accessors ((mode surface-parameters-mode)
  		     (bounce surface-parameters-bounce)
  		     (bounce-vel surface-parameters-bounce-vel)) params
        
        (setf mode
  	    (union (surface-Mode this) (surface-Mode this)))
        
        (setf (surface-parameters-mu params)
  	    (* (surface-mu this) (surface-mu that)))
        
  	(when (member :mu2 mode)
  	  (setf (surface-parameters-mu2 params)
  		(* (surface-mu2 this) (surface-mu2 that))))
  	
  	(when (member :bounce mode)
  
negative.code: 	 (b2 (geom-get-body o2)))
      
      ;; At least one of these needs a body or movement shouldn't be happening...
      (when (and (or b1 b2)
  	       (or (and b1 (body-is-enabled b1))
  		   (and b2 (body-is-enabled b2))))
  		   
  
        ;; create space to hold the collisions...
        (with-foreign-object (contact '(:struct Contact-struct) *default-max-contacts*)
  	
  	(let* ((surf (cffi:foreign-slot-pointer contact '(:struct contact-struct) 'surface))
  	       (geom (cffi:foreign-slot-pointer contact '(:struct ode::contact-struct) 'geom)))
  
  	  (combine-physics-objects o1 o2 surf)
  
  	  (describe surf)
  	  (format t "surf mode: ~A!~%" (cffi:foreign-slot-value (cffi:foreign-slot-pointer contact '(:struct contact-struct) 'surface) '(:struct surface-parameters-struct) 'mode))
  	  (format t "surf bounce: ~A!~%" (cffi:foreign-slot-value (cffi:foreign-slot-pointer contact '(:struct contact-struct) 'surface) '(:struct surface-parameters-struct) 'bounce))
  	  (format t "surf bounce-vel: ~A!~%" (cffi:foreign-slot-value (cffi:foreign-slot-pointer contact '(:struct contact-struct) 'surface) '(:struct surface-parameters-struct) 'bounce-vel))
  	  (format t "surf soft-cfm: ~A!~%" (cffi:foreign-slot-value (cffi:foreign-slot-pointer contact '(:struct contact-struct) 'surface) '(:struct surface-parameters-struct) 'soft-cfm))
  
  	(let ((num-contacts (collide o1
  				     o2
  				     *default-max-contacts*
  				     geom
  				     (cffi:foreign-type-size '(:struct contact-struct)))))
  
  	  (unless (zerop num-contacts)
  
  	    
  	    ;; (format t "geo pos: ~A!~%" (cffi:foreign-slot-value  geom '(:struct contact-geometry-struct) 'pos))
  	    ;; (format t "geo depth: ~A!~%" (cffi:foreign-slot-value geom '(:struct contact-geometry-struct) 'depth))
  	    ;; (format t "g1 depth: ~A!~%" (cffi:foreign-slot-value  geom '(:struct contact-geometry-struct) 'g1))
  	    ;; (format t "g2 depth: ~A!~%" (cffi:foreign-slot-value  geom '(:struct contact-geometry-struct) 'g2))
  	    
  	    (let* ((world (cond (b1 (body-get-world b1))
  				(b2 (body-get-world b2))
  				(t (error "Can't find a world for these two geometries/bodies!"))))
  		   (contact-group (ode::contact-group world)))
  	      
  	      (dotimes (i num-contacts)
  		(joint-attach (joint-create-contact world contact-group (cffi:mem-aptr contact '(:struct Contact-Struct) i)) b1 b2))))))))))
  
  