Set the PASSABLE flag for your entities and use IGNORE_PASSABLE in your c_move code.

In your walk code you have to trace down to the floor and so you can set your entity back to the floor. Search for c_trace in the manual.

Another question do you do already the workshop?