Game summary implementation.

def _summarize(self):
        """Game summary implementation."""
        self._achievements_summarized = True
        data = None
        if self._postgame:
            data = self._postgame.action
        game_type = 'DM' if self._header.lobby.game_type == 'DM' else 'RM'
        self._summary = {
            'players': list(self.players(data, game_type)),
            'diplomacy': self._diplomacy,
            'rec_owner_index': self._header.replay.rec_player,
            'rec_owner_number': self._rec_owner_number(),
            'settings': {
                'type': game_type,
                'difficulty': self._header.scenario.game_settings.difficulty,
                # data.resource_level
                'resource_level': 'standard',
                'population_limit': self._header.lobby.population_limit * 25,
                'speed': mgz.const.SPEEDS.get(self._header.replay.game_speed),
                'reveal_map': self._header.lobby.reveal_map,
                # self._get_starting_age(data.starting_age)
                'starting_age': 'Dark' if game_type == 'RM' else 'Post Imperial',
                'victory_condition': ('conquest' if self._header.scenario.victory.is_conquest
                                      else 'other'),
                # not data.team_together
                'team_together': True,
                # data.all_techs
                'all_technologies': False,
                'cheats': self._header.replay.cheats_enabled,
                'lock_teams': self._header.lobby.lock_teams,
                # data.lock_speed
                'lock_speed': True,
                'record_game': True
            },
            'map': {
                'name': self._map.name(),
                'size': self._map.size(),
                'x': self._header.map_info.size_x,
                'y': self._header.map_info.size_y,
                'nomad': self.is_nomad(),
                'regicide': self.is_regicide(),
                'arena': self.is_arena(),
                'hash': self._map_hash()
            },
            'mod': self._get_mod(),
            'restore': {
                'restored': self._header.initial.restore_time > 0,
                'start_int': self._header.initial.restore_time,
                'start_time': mgz.util.convert_to_timestamp(self._header.initial.restore_time /
                                                            1000)
            },
            'voobly': {
                'ladder': self._ladder,
                'rated': self._ladder != None
            },
            'number_of_humans': len([p for p in self._header.scenario.game_settings.player_info
                                     if p['type'] == 'human']),
            'number_of_ai': len([p for p in self._header.scenario.game_settings.player_info
                                 if p['type'] == 'computer']),
            'duration': mgz.util.convert_to_timestamp(self._time / 1000),
            'time_int': self._time,
            'metadata': {
                'hash': self._hash,
                'version': mgz.const.VERSIONS[self._header.version],
                'sub_version': round(self._header.sub_version, 2),
                'filename': os.path.basename(self._path),
                'timestamp': self._get_timestamp()
            },
            'action_histogram': dict(self._actions_without_player),
            'queue': self._queue
        }
        self._summary['finished'] = guess_finished(self._summary, data)
        if self._summary['finished']:
            self._summary['won_in'] = self._won_in().title()
            self._set_winning_team()
        if self._show_chat:
            self._summary['chat'] = self._chat
        if self._show_timeline:
            self._summary['timeline'] = self._timeline
        if self._show_coords:
            self._summary['coords'] = self._coords