A implementação do conceito de nível varia bastante, mas duas técnicas comuns vêm à mente.
Na maioria dos jogos abertos, em que os níveis / progresso são apenas um estado interno do jogador, a implementação normal é fazer com que os recursos do jogo alcancem o estado do jogador (por isso, se o seu nível começa "nas docas", o jogo inicia. colocando você lá e começa a carregar.) O jogo espera até que todos os recursos terminem de carregar e depois muda para o estado "carregado".
A outra técnica comum é fazer com que o nível seja mais explícito. O nível a ser carregado ainda vem das informações da sessão do jogador, mas você carrega o nível no jogo e coloca as entidades em seus pontos de partida. Essa é a norma para jogos que possuem níveis literais que são arenas para jogar. Salvar jogos para esses jogos de estilo tendem a salvar apenas a diferença das condições iniciais do nível.
Como você pode ver, nenhuma delas implica que você possui um estado de jogo por nível, apenas que o nível está reproduzindo informações da sessão do jogador ou os recursos são explicitamente carregados para o nível e o jogador é colocado dentro dele.
No seu side-scroller, isso pode ser considerado como a informação da sessão que contém o índice / ID do nível e, em seguida, carregar esse nível no jogo principal. Quando o índice de nível é alterado, você armazena todas as informações necessárias para viajar com você de um nível para o próximo, libera o nível atual e carrega o novo e, finalmente, cai no estado salvo.
Os pontos ou o progresso do jogo são normalmente gerenciados por meio de informações da sessão, que geralmente incluem suas vidas atuais, pontuação, tempo de jogo, mas não as informações intra-nível (como nível de saúde, velocidade, número de marcadores na tela). Essa separação é importante em jogos em que o nível nem sempre é mapeado para o local (jogos em que você revisita locais por exemplo), mas pode ajudar a simplificar seu pensamento, mesmo em jogos lineares.