Physics are definitely possible, as are high resolution textures.

I did have the code for aligning objects to slopes, so it definitely is possible, although it was removed once we added physx support.

All you do is replace `// lie flat`

// pev->angles.x = 0;

// pev->angles.z = 0;

in CBasePlayerItem::FallThink() with

` TraceResult tr;`

// look down directly to know the surface we're lying.

UTIL_TraceLine( pev->origin,

pev->origin - Vector(0,0,10), ignore_monsters, edict(), &tr );

#ifndef M_PI

#define M_PI 3.14159265358979

#endif

#define ang2rad (2 * M_PI / 360)

if ( tr.flFraction < 1.0 )

{

Vector angdir = Vector(

cos(pev->angles.y * ang2rad) * cos(pev->angles.x * ang2rad),

sin(pev->angles.y * ang2rad) * cos(pev->angles.x * ang2rad),

-sin(pev->angles.x * ang2rad));

Vector angdiry = Vector(

sin(pev->angles.y * ang2rad) * cos(pev->angles.x * ang2rad),

cos(pev->angles.y * ang2rad) * cos(pev->angles.x * ang2rad), -sin(pev->angles.x * ang2rad));

pev->angles = UTIL_VecToAngles(

angdir - DotProduct(angdir, tr.vecPlaneNormal) * tr.vecPlaneNormal);

pev->angles.z = -UTIL_VecToAngles(

angdiry - DotProduct(angdiry, tr.vecPlaneNormal) *

tr.vecPlaneNormal).x;

}

#undef ang2rad

This can also work with dead bodies and other objects.