fleshing out core game logic