Nice! Good luck with that. I don't like using other people's code, so I'd probably just look at it to see how it's done. tongue

Anyway, good news. I finally got the walking up steps thingy to work properly, while not screwing up the slopes. First I set move_min_z to 0.1, because the default 3dgs collision detection is going to take care of sliding down slopes. Next, I made a c_trace that goes from the bottom of the bounding box of the player, to a bit lower (5 unit) than his model's feet. Then it checks if there was a hit, and if the normal.z is more than 0.9.

It instantly sets the entity's z to hit.z + 60 (standing on the ground) if normal.z is less than 1. So if the player is walking on a slope, he will stick to the ground. Then it checks if my.z is lower than hit.z + 60 (the feet of the player is 60 units below the origin), and if normal.z = 1. If so, it increases z_move to 10 (a variable c_move uses). This allows for the player to walk up steps.

If the player is now perfectly standing on the ground, z_move is set to 0. Finally, if the c_trace does not hit, or if the player walks on to a slope too steep, gravity pulls the player down.

Code:
move_min_z = 0.1;

[irrelevant code]

c_trace(vector(my.x,my.y,my.z + my.min_z),vector(my.x,my.y,(my.z - 65)),IGNORE_ME|IGNORE_PASSABLE);
	if(trace_hit && normal.z > 0.9){
		if(normal.z < 1){my.z = hit.z + 60;} //if on slope
		if(my.z < hit.z + 60){ //if too low
			if(normal.z == 1){z_move = 10;} //and if on flat ground
		}else{ //if standing perfectly on ground
			z_move = 0;
		}
	}else{ //if not on ground
		z_move -= grav * time_step;
	}
c_move(me,nullvector,vector(0,0,z_move * time_step),GLIDE|IGNORE_PASSABLE);

Woot.