initial gamestate refactor, it's rought but working