hasMoved based on move-count, not lastMove; also burned by JavaScript 0 = falsy