Shadowcasting Basics
It's a little broken, but with a few changes I think it'll be all good!