the client-side javascript is written from scratch -- so if there's any wonkiness with the physics (especially with the moving crates), it's my own fault. it probably would have been faster to use an existing engine (i'm sure there's many), but i wanted to take on the challenge myself.