I think I'm technically done now. Will probably add small fixes and the bonus problem solution later