* Zillion: use "new" settings api and cleaning * python 3.10 typing update * don't separate assignments of item link players
		
			
				
	
	
		
			42 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			42 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
from dataclasses import dataclass
 | 
						|
import json
 | 
						|
 | 
						|
from zilliandomizer.game import Game as ZzGame
 | 
						|
 | 
						|
 | 
						|
@dataclass
 | 
						|
class GenData:
 | 
						|
    """ data passed from generation to patcher """
 | 
						|
 | 
						|
    multi_items: dict[str, tuple[str, str]]
 | 
						|
    """ zz_loc_name to (item_name, player_name) """
 | 
						|
    zz_game: ZzGame
 | 
						|
    game_id: bytes
 | 
						|
    """ the byte string used to detect the rom """
 | 
						|
 | 
						|
    def to_json(self) -> str:
 | 
						|
        """ serialized data from generation needed to patch rom """
 | 
						|
        jsonable = {
 | 
						|
            "multi_items": self.multi_items,
 | 
						|
            "zz_game": self.zz_game.to_jsonable(),
 | 
						|
            "game_id": list(self.game_id)
 | 
						|
        }
 | 
						|
        return json.dumps(jsonable)
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def from_json(gen_data_str: str) -> "GenData":
 | 
						|
        """ the reverse of `to_json` """
 | 
						|
        from_json = json.loads(gen_data_str)
 | 
						|
 | 
						|
        # backwards compatibility for seeds generated before new map_gen options
 | 
						|
        room_gen = from_json["zz_game"]["options"].get("room_gen", None)
 | 
						|
        if room_gen is not None:
 | 
						|
            from_json["zz_game"]["options"]["map_gen"] = {False: "none", True: "rooms"}.get(room_gen, "none")
 | 
						|
            del from_json["zz_game"]["options"]["room_gen"]
 | 
						|
 | 
						|
        return GenData(
 | 
						|
            from_json["multi_items"],
 | 
						|
            ZzGame.from_jsonable(from_json["zz_game"]),
 | 
						|
            bytes(from_json["game_id"])
 | 
						|
        )
 |