Estou desenvolvendo um Metroidvania 2D que consiste em uma série de níveis interconectados que podem ser revisitados.
Cada nível é representado por um arquivo Tiled TMX no qual especifiquei onde vários objetos de diferentes classes de sprites aparecem (por exemplo, inimigos, captadores, alavancas etc.). Ao iniciar um novo jogo, carregar um jogo salvo ou alterar um nível, meu loop de jogo é executado no arquivo TMX apropriado e gera todos os objetos nesse nível.
Trato de mudanças de nível da seguinte maneira: Se o Player
objeto cruza um Portal
objeto, change_map()
é chamado um método que carrega um novo mapa (o associado ao portal cruzado) e posiciona o jogador na posição apropriada no novo mapa.
Alguns dos meus objetos têm estados que eu gostaria de persistir com as mudanças de nível, salvando e saindo do jogo. Por exemplo, se um jogador desbloquear uma porta e o atributo de estado da porta estiver definido como "aberto", eu gostaria que a porta estivesse aberta quando o jogador retornar. Quero algo semelhante para alavancas, que podem ser definidas para esquerda ou direita, e vários outros objetos. Além disso, o jogador às vezes coleciona itens que eu não quero ressurgir quando o jogador revisitar a área.
Minha pergunta é, portanto, como posso lidar com esse tipo de persistência?
Estou trabalhando em Python, apesar de achar que você pode abstrair disso.