rem: if (CollidingElement (ObjPtr))
add: if (CollidingElement (ObjPtr) || ORZ_MARINE (ObjPtr))
context: self_destruct (PELEMENT ElementPtr){	STARSHIPPTR StarShipPtr;	GetElementStarShip (ElementPtr, &StarShipPtr);	if (ElementPtr->state_flags & PLAYER_SHIP)	{		HELEMENT hDestruct;				hDestruct = AllocElement ();		if (hDestruct)		{			ELEMENTPTR DestructPtr;			LockElement (hDestruct, &DestructPtr);			DestructPtr->state_flags = APPEARING | NONSOLID | FINITE_LIFE |					(ElementPtr->state_flags & (GOOD_GUY | BAD_GUY));			DestructPtr->next.location = ElementPtr->next.location;			DestructPtr->life_span = 0;			DestructPtr->pParent = ElementPtr->pParent;			DestructPtr->hTarget = 0;			DestructPtr->death_func = self_destruct;			UnlockElement (hDestruct);			PutElement (hDestruct);		}		ElementPtr->state_flags |= NONSOLID;		ElementPtr->life_span = 0;		ElementPtr->preprocess_func = destruct_preprocess;	}	else	{		HELEMENT hElement, hNextElement;		for (hElement = GetHeadElement ();				hElement != 0; hElement = hNextElement)		{			ELEMENTPTR ObjPtr;			LockElement (hElement, &ObjPtr);			hNextElement = GetSuccElement (ObjPtr);			if (CollidingElement (ObjPtr))			{#define DESTRUCT_RANGE 180				SIZE delta_x, delta_y;				DWORD dist;				if ((delta_x = ObjPtr->next.location.x						- ElementPtr->next.location.x) < 0)					delta_x = -delta_x;				if ((delta_y = ObjPtr->next.location.y						- ElementPtr->next.location.y) < 0)					delta_y = -delta_y;				delta_x = WORLD_TO_DISPLAY (delta_x);				delta_y = WORLD_TO_DISPLAY (delta_y);				if (delta_x <= DESTRUCT_RANGE && delta_y <= DESTRUCT_RANGE						&& (dist = (DWORD)(delta_x * delta_x)						+ (DWORD)(delta_y * delta_y)) <=						(DWORD)(DESTRUCT_RANGE * DESTRUCT_RANGE))				{#define MAX_DESTRUCTION (DESTRUCT_RANGE / 10)					SIZE destruction;					destruction = ((MAX_DESTRUCTION							* (DESTRUCT_RANGE - square_root (dist)))							/ DESTRUCT_RANGE) + 1;					if (ObjPtr->state_flags & PLAYER_SHIP)					{						if (!DeltaCrew (ObjPtr, -destruction))							ObjPtr->life_span = 0;					}					else if (!GRAVITY_MASS (ObjPtr->mass_points))					{						if ((BYTE)destruction < ObjPtr->hit_points)							ObjPtr->hit_points -= (BYTE)destruction;						else						{							ObjPtr->hit_points = 0;							ObjPtr->life_span = 0;						}					}				}			}			UnlockElement (hElement);		}	}}