| 5814 | } |
| 5815 | |
| 5816 | void zEntPlayer_SNDPlayRandom(_tagePlayerSnd player_snd_start, _tagePlayerSnd player_snd_end, |
| 5817 | float delay) |
| 5818 | { |
| 5819 | if (globals.cmgr == NULL && !sPlayerIgnoreSound) |
| 5820 | { |
| 5821 | S32 diff = player_snd_end - player_snd_start + 1; |
| 5822 | S32 rand_array[32]; |
| 5823 | for (S32 i = 0; i < diff; i++) |
| 5824 | { |
| 5825 | rand_array[i] = player_snd_start + i; |
| 5826 | } |
| 5827 | |
| 5828 | for (S32 i = 0; i < diff; i++) |
| 5829 | { |
| 5830 | U32 j = rand() % diff; |
| 5831 | S32 swap = rand_array[i]; |
| 5832 | rand_array[i] = rand_array[j]; |
| 5833 | rand_array[j] = swap; |
| 5834 | } |
| 5835 | |
| 5836 | S32 pick_sound = 0; |
| 5837 | for (S32 i = 0; i < diff; i++) |
| 5838 | { |
| 5839 | S32 possible = rand_array[i]; |
| 5840 | if (sPlayerSnd[gCurrentPlayer][possible] && |
| 5841 | possible != sPlayerSndRand[gCurrentPlayer][player_snd_start]) |
| 5842 | { |
| 5843 | pick_sound = possible; |
| 5844 | break; |
| 5845 | } |
| 5846 | pick_sound = 0; |
| 5847 | } |
| 5848 | |
| 5849 | if (pick_sound > 0) |
| 5850 | { |
| 5851 | sPlayerSndRand[gCurrentPlayer][player_snd_start] = pick_sound; |
| 5852 | U32 returned_snd_id = |
| 5853 | xSndPlay(sPlayerSnd[gCurrentPlayer][pick_sound], sPlayerSndFxVolume[pick_sound], |
| 5854 | 0.0f, 0x80, 0, 0, SND_CAT_GAME, delay); |
| 5855 | |
| 5856 | if (sPlayerRumbleTime[pick_sound] > 0.0f) |
| 5857 | { |
| 5858 | xPadAddRumble(globals.currentActivePad, sPlayerRumbleType[pick_sound], |
| 5859 | sPlayerRumbleTime[pick_sound], 1, 0); |
| 5860 | } |
| 5861 | |
| 5862 | // This unrolling makes no sense |
| 5863 | for (S32 i = 0; i < (player_snd_end + 1) - player_snd_start; i++) |
| 5864 | { |
| 5865 | sPlayerSndID[gCurrentPlayer][player_snd_start + i] = returned_snd_id; |
| 5866 | } |
| 5867 | } |
| 5868 | } |
| 5869 | } |
| 5870 | |
| 5871 | void zEntPlayer_SNDSetVol(_tagePlayerSnd player_snd, F32 new_vol) |
| 5872 | { |
no test coverage detected