First part of a large refactor to support multiple game types