ref: 25c260fde5a5ee9ca01bd805e88e89f0f508f803
dir: /graveyard/doomn-sawup/
does not work. second part should also be removed. diff -Naur a/sys/src/games/doom/i_sound.c b/sys/src/games/doom/i_sound.c --- a/sys/src/games/doom/i_sound.c Wed Jul 29 13:45:35 2015 +++ b/sys/src/games/doom/i_sound.c Sun Aug 2 23:51:32 2015 @@ -333,33 +333,21 @@ int rightvol; int leftvol; - /* Chainsaw troubles. - ** Play these sound effects only one at a time. */ - if ( id == sfx_sawup || - id == sfx_sawidl || - id == sfx_sawful || - id == sfx_sawhit || - id == sfx_stnmov || - id == sfx_pistol ) + for (i=0 ; (i<NUM_CHANNELS) && (channels[i]) ; i++) { - /* Loop all channels, check. */ - for (i=0 ; i < NUM_CHANNELS ; i++) - { - /* Active and using the same SFX? */ - if( (channels[i]) && (channelids[i] == id) ) - { - /* Reset. */ + if(id == sfx_sawidl && channelids[i] == sfx_sawup) /* don't play during sawup */ + return 0; + if(channelids[i] == id) + switch(id){ /* to be played only one at a time */ + case sfx_sawup: + case sfx_sawidl: + case sfx_sawful: + case sfx_sawhit: + case sfx_stnmov: + case sfx_pistol: channels[i] = 0; - /* We are sure that iff, - ** there will only be one. */ - break; + continue; } - } - } - - /* Loop all channels to find oldest SFX. */ - for (i=0 ; (i<NUM_CHANNELS) && (channels[i]) ; i++) - { if(channelstart[i] < oldest) { oldestnum = i; @@ -383,7 +371,7 @@ */ channels[slot] = (uchar*) S_sfx[id].data; /* Set pointer to end of raw data. */ - channelsend[slot] = channels[slot] + lengths[id]; + channelsend[slot] = channels[slot] + (id == sfx_sawful ? lengths[id] / 2 : lengths[id]); /* Reset current handle number, limited to 0..100. */ if (!handlenums)