code: def convert_to_legacy_v3(
          game_tick_packet: game_data_struct.GameTickPacket,
          field_info_packet: game_data_struct.FieldInfoPacket = None):
      
      legacy_packet = GameTickPacket()
  
      legacy_packet.numBoosts = game_tick_packet.num_boost
      legacy_packet.numCars = game_tick_packet.num_cars
  
      for i in range(game_tick_packet.num_cars):
          convert_player_info(legacy_packet.gamecars[i], game_tick_packet.game_cars[i])
  
      for i in range(game_tick_packet.num_boost):
          convert_boost_info(legacy_packet.gameBoosts[i], game_tick_packet.game_boosts[i])
          if field_info_packet is not None:
              convert_vector(legacy_packet.gameBoosts[i].Location, field_info_packet.boost_pads[i].location)
  
      convert_ball_info(legacy_packet.gameball, game_tick_packet.game_ball)
  
      convert_game_info(legacy_packet.gameInfo, game_tick_packet.game_info)
  
      return legacy_packet
docs: Returns a legacy packet from v3
      :param game_tick_packet a game tick packet in the v4 struct format.
      :param field_info_packet a field info packet in the v4 struct format. Optional. If this is not supplied,
      none of the boost locations will be filled in.