@Override
    public void deserialize(Buffer buf) {
        subAreaId = buf.readShort();
        if (subAreaId < 0)
            throw new RuntimeException("Forbidden value on subAreaId = " + subAreaId + ", it doesn't respect the following condition : subAreaId < 0");
        mapId = buf.readInt();
        if (mapId < 0)
            throw new RuntimeException("Forbidden value on mapId = " + mapId + ", it doesn't respect the following condition : mapId < 0");
        subareaAlignmentSide = buf.readByte();
        int limit = buf.readUShort();
        houses = new HouseInformations[limit];
        for (int i = 0; i < limit; i++) {
            houses[i] = ProtocolTypeManager.getInstance().build(buf.readShort());
            houses[i].deserialize(buf);
        }
        limit = buf.readUShort();
        actors = new GameRolePlayActorInformations[limit];
        for (int i = 0; i < limit; i++) {
            actors[i] = ProtocolTypeManager.getInstance().build(buf.readShort());
            actors[i].deserialize(buf);
        }
        limit = buf.readUShort();
        interactiveElements = new InteractiveElement[limit];
        for (int i = 0; i < limit; i++) {
            interactiveElements[i] = ProtocolTypeManager.getInstance().build(buf.readShort());
            interactiveElements[i].deserialize(buf);
        }
        limit = buf.readUShort();
        statedElements = new StatedElement[limit];
        for (int i = 0; i < limit; i++) {
            statedElements[i] = new StatedElement();
            statedElements[i].deserialize(buf);
        }
        limit = buf.readUShort();
        obstacles = new MapObstacle[limit];
        for (int i = 0; i < limit; i++) {
            obstacles[i] = new MapObstacle();
            obstacles[i].deserialize(buf);
        }
        limit = buf.readUShort();
        fights = new FightCommonInformations[limit];
        for (int i = 0; i < limit; i++) {
            fights[i] = new FightCommonInformations();
            fights[i].deserialize(buf);
        }
    }