Estoy desarrollando un Metroidvania 2D que consiste en una serie de niveles interconectados que pueden revisarse.
Cada nivel está representado por un archivo TMX en mosaico en el que he especificado dónde se generan varios objetos de diferentes clases de sprites (por ejemplo, enemigos, pastillas, palancas, etc.). Al comenzar un nuevo juego, cargar un juego guardado o cambiar un nivel, mi ciclo de juego se ejecuta a través del archivo TMX apropiado y genera todos los objetos en ese nivel.
Manejo los cambios de nivel de la siguiente manera: si el Player
objeto se cruza con un Portal
objeto, change_map()
se llama a un método que carga un nuevo mapa (el asociado con el portal intersectado) y coloca al jugador en la posición adecuada en el nuevo mapa.
Algunos de mis objetos tienen estados que me gustaría ser persistente a través de cambios de nivel y guardar y salir del juego. Por ejemplo, si un jugador desbloquea una puerta y el atributo de estado de la puerta está "abierto", me gustaría que la puerta esté abierta cuando el jugador regrese. Quiero algo similar para las palancas, que se pueden configurar a izquierda o derecha, y varios otros objetos. Además, el jugador a veces habrá recolectado elementos que no quiero reaparecer cuando vuelva a visitar el área.
Mi pregunta es, entonces, ¿cómo puedo manejar este tipo de persistencia?
Estoy trabajando en Python, aunque creo que puedes abstraerte de eso.