private void NewRound()
    {
        m_playersRemaining.Clear();
        for (int i = 0; i < m_players.Length; ++i)
        {
            if (!m_players[i].activeSelf)
            {
                continue;
            }

            // add players to remaining players
            m_playersRemaining.Add(m_players[i]);

            // reset player position
            m_players[i].transform.position = m_playerOriginalPositions[i];
            // reset player rotation
            m_players[i].transform.rotation = m_playerOriginalRotations[i];
            // reset player velocities
            m_players[i].GetComponent <Rigidbody>().velocity        = Vector3.zero;
            m_players[i].GetComponent <Rigidbody>().angularVelocity = Vector3.zero;
            // reset player knockback meter
            m_players[i].GetComponent <Knockback>().m_fKnockbackMeter = 0.0f;
            // set kinematic to false
            m_players[i].GetComponent <Rigidbody>().isKinematic = false;
            // reset powerups
            m_players[i].GetComponent <PlayerController>().m_cruiseControl.bFlag  = false;
            m_players[i].GetComponent <PlayerController>().m_cruiseControl.fTimer = 0.0f;
            m_players[i].GetComponent <Knockback>().m_shield.bFlag  = false;
            m_players[i].GetComponent <Knockback>().m_shield.fTimer = 0.0f;
            m_players[i].GetComponent <Knockback>().m_shieldSphere.SetActive(false);
            m_players[i].GetComponent <PlayerController>().m_weaponSize.bFlag               = false;
            m_players[i].GetComponent <PlayerController>().m_weaponSize.fTimer              = 0.0f;
            m_players[i].GetComponent <PlayerController>().m_weapon.transform.localScale    = m_players[i].GetComponent <PlayerController>().m_v3BaseWeaponScale;
            m_players[i].GetComponent <PlayerController>().m_weapon.transform.localPosition = m_players[i].GetComponent <PlayerController>().m_v3BaseWeaponPosition;
            // reset player status
            m_players[i].GetComponent <PlayerController>().m_bInCrane = false;
            m_players[i].GetComponent <PlayerController>().m_bIsOut   = false;
            m_players[i].GetComponent <PlayerController>().StopAttack();
            m_players[i].GetComponent <PlayerController>().m_cAttackAmount = 0;
            m_players[i].GetComponent <PlayerController>().m_smokeParticle.Play();
            // set claw to null
            m_players[i].GetComponent <PlayerController>().m_claw = null;
            // reset dash timer
            m_players[i].GetComponent <Dash>().ResetTimer();
        }

        for (int i = 0; i < m_cranes.Length; ++i)
        {
            m_cranes[i].GetComponent <CraneManager>().m_bOccupied = false;
            m_cranes[i].GetComponent <CraneManager>().m_player    = null;

            m_claws[i].transform.localPosition          = m_clawOriginalPositions[i];
            m_claws[i].transform.localRotation          = m_clawOriginalRotations[i];
            m_claws[i].GetComponent <Claw>().m_bDropped = false;
            m_claws[i].GetComponent <Claw>().m_bHasItem = false;
            GameObject clawBomb = m_claws[i].GetComponent <Claw>().m_item;
            Destroy(clawBomb);
            m_claws[i].GetComponent <Claw>().m_item           = null;
            m_claws[i].GetComponent <Claw>().m_bHasPlayer     = false;
            m_claws[i].GetComponent <Claw>().m_pickedUpPlayer = null;
            m_claws[i].GetComponentInChildren <LineRenderer>().SetPosition(1, Vector3.zero);
        }

        // resets the wrecking ball
        m_wreckingBall.ResetBall();

        BombDropper dropperScript = m_bombDropper.GetComponent <BombDropper>();

        // reset bombdropper
        dropperScript.m_blocks.Clear();
        dropperScript.AddBlocks();
        dropperScript.ResetBlocks();
        dropperScript.m_state = BOMBDROPPER_STATE.E_RESETTING;
        dropperScript.ResetTimers();
        dropperScript.transform.position = new Vector3(0.0f, dropperScript.m_fStartYPos, 0.0f);
        // destroy bomb if there is one
        if (dropperScript.m_currentBomb)
        {
            Destroy(dropperScript.m_currentBomb);
        }

        // reset all pickup spawnpoints
        foreach (var spawnPoint in m_powerupSpawnPoints)
        {
            spawnPoint.GetComponent <SpawnPoint>().m_bHasPickup = false;
        }

        // destroy all pickups in scene
        foreach (var pickup in m_pickupManager.GetComponent <PickupManager>().m_spawnedPickups)
        {
            Destroy(pickup);
        }

        // clear list of pickups
        m_pickupManager.GetComponent <PickupManager>().m_spawnedPickups.Clear();

        // disable all bombs in scene
        foreach (var bomb in GameObject.FindGameObjectsWithTag("Bomb"))
        {
            Destroy(bomb);
        }
    }