First pass at functional particle engine