Disassociate sound resources from the generators they are connected with. Use multiple generators to play multiple shot sounds at the same time. It sounds weird but it kind of works.

This commit is contained in:
Jeremy Rand 2020-12-10 21:55:13 -05:00
parent bae931aaa6
commit 0136579125
12 changed files with 45 additions and 57 deletions

View File

@ -288,7 +288,7 @@ shootFlea entry
beq shootFlea_faster
jsl explodeFlea
~FFStartPlaying #KILL_SOUND_GEN_BIT
~FFStartPlaying #1|KILL_SOUND_GENERATOR
jmp scoreAddTwoHundred
shootFlea_faster anop

View File

@ -82,9 +82,9 @@ resetMushrooms_keepChecking anop
~FFStartPlaying mushroomSound
lda mushroomSound
asl a
and #BONUS2_SOUND_GEN_BIT+BONUS3_SOUND_GEN_BIT
and #7|BONUS1_SOUND_GENERATOR
bne resetMushrooms_doneSound
lda #BONUS1_SOUND_GEN_BIT
lda #1|BONUS1_SOUND_GENERATOR
resetMushrooms_doneSound anop
sta mushroomSound
ldx mushroomToRefresh
@ -166,7 +166,7 @@ shootMushroom_done anop
mushroomToRefresh dc i2'INVALID_TILE_NUM'
mushroomExplosionSprite dc i2'0'
mushroomSound dc i2'BONUS1_SOUND_GEN_BIT'
mushroomSound dc i2'1|BONUS1_SOUND_GENERATOR'
mushroomRefreshWait dc i2'0'

View File

@ -492,7 +492,7 @@ updatePlayer_contCollision anop
sta playerFrameCount
lda #SHIP_EXPLOSION_LAST_OFFSET
sta playerExplosionOffset
~FFStartPlaying #DEATH_SOUND_GEN_BIT
~FFStartPlaying #1|DEATH_SOUND_GENERATOR
jmp updatePlayer_exploding
updatePlayer_noCollision anop

View File

@ -371,7 +371,7 @@ shootScorpion entry
inc a
inc a
sta scorpionScreenOffset
~FFStartPlaying #KILL_SOUND_GEN_BIT
~FFStartPlaying #1|KILL_SOUND_GENERATOR
jmp scoreAddOneThousand
shootScorpion_done anop

View File

@ -1781,7 +1781,7 @@ isSegmentCollision_returnTrue anop
; Call this with the segment num * 2 in the X register
shootSegment entry
phx
~FFStartPlaying #KILL_SOUND_GEN_BIT
~FFStartPlaying #1|KILL_SOUND_GENERATOR
lda segmentStates,x
cmp #SEGMENT_STATE_BODY
beq shootSegment_body

View File

@ -75,13 +75,14 @@ updateShot_shifted anop
updateShot_notNone anop
cmp #SHOT_STATE_START_SHOOTING
bne updateShot_shooting
; pha
; ~FFSoundDoneStatus #FIRE_SOUND_GENERATOR
; pla
; bne updateShot_noSoundPlaying
; ~FFStopSound #FIRE_SOUND_GEN_BIT
;updateShot_noSoundPlaying anop
~FFStartPlaying #FIRE_SOUND_GEN_BIT
~FFStartPlaying shotSound
lda shotSound
asl a
and #31|FIRE1_SOUND_GENERATOR
bne updateShot_doneSound
lda #1|FIRE1_SOUND_GENERATOR
updateShot_doneSound anop
sta shotSound
lda SHOT_STATE_SHOOTING
sta shotState
lda #1
@ -212,5 +213,6 @@ shotShifted dc i2'0'
shotAddress dc i2'0'
shotTileOffsetAbove dc i2'0'
shotTileOffsetBelow dc i2'0'
shotSound dc i2'1|FIRE1_SOUND_GENERATOR'
end

View File

@ -810,7 +810,7 @@ shootSpider entry
cmp #SPIDER_STATE_LEFT_DIAG_DOWN
blt shootSpider_done
~FFStartPlaying #KILL_SOUND_GEN_BIT
~FFStartPlaying #1|KILL_SOUND_GENERATOR
jsl explodeSpider
cmp mouseAddress
blt shootSpider_playerBelow

View File

@ -81,6 +81,22 @@ $gEquates{"P2_LIVES_OFFSET"} = ($gEquates{"LHS_FIRST_TILE"} + ($gEquates{"LHS_NU
$gEquates{"HIGH_SCORE_ONES_OFFSET"} = ($gEquates{"LHS_FIRST_TILE"} + ($gEquates{"LHS_NUM_TILES_WIDE"} * 13) + ($gEquates{"LHS_NUM_TILES_WIDE"} - 2)) * $gEquates{"SIZEOF_TILE_INFO"};
$gEquates{"BONUS1_SOUND_GENERATOR"} = 0;
$gEquates{"BONUS2_SOUND_GENERATOR"} = 1;
$gEquates{"BONUS3_SOUND_GENERATOR"} = 2;
$gEquates{"DEATH_SOUND_GENERATOR"} = 3;
$gEquates{"KILL_SOUND_GENERATOR"} = 4;
$gEquates{"SEGMENTS_SOUND_GENERATOR"} = 5;
$gEquates{"SPIDER_SOUND_GENERATOR"} = 6;
$gEquates{"FLEA_SOUND_GENERATOR"} = 7;
$gEquates{"SCORPION_SOUND_GENERATOR"} = 8;
$gEquates{"EXTRA_LIFE_SOUND_GENERATOR"} = 9;
$gEquates{"FIRE1_SOUND_GENERATOR"} = 10;
$gEquates{"FIRE2_SOUND_GENERATOR"} = 11;
$gEquates{"FIRE3_SOUND_GENERATOR"} = 12;
$gEquates{"FIRE4_SOUND_GENERATOR"} = 13;
$gEquates{"FIRE5_SOUND_GENERATOR"} = 14;
our @gTileDirty = ("TILE_STATE_CLEAN") x $gEquates{"TOTAL_NUM_TILES"};
our @gTileScreenOffset = (0) x $gEquates{"TOTAL_NUM_TILES"};

View File

@ -105,24 +105,6 @@ TILE_POISON_A_MUSHROOM gequ TILE_POISON_MUSHROOM4-TILE_MUSHROOM4
NUM_COLOUR_PALETTES gequ 14
; These need to be kept consistent with the defines in main.h
BONUS1_SOUND_GENERATOR gequ 1
BONUS2_SOUND_GENERATOR gequ 2
BONUS3_SOUND_GENERATOR gequ 3
DEATH_SOUND_GENERATOR gequ 4
FIRE_SOUND_GENERATOR gequ 5
KILL_SOUND_GENERATOR gequ 6
SEGMENTS_SOUND_GENERATOR gequ 7
SPIDER_SOUND_GENERATOR gequ 8
BONUS1_SOUND_GEN_BIT gequ 1|BONUS1_SOUND_GENERATOR
BONUS2_SOUND_GEN_BIT gequ 1|BONUS2_SOUND_GENERATOR
BONUS3_SOUND_GEN_BIT gequ 1|BONUS3_SOUND_GENERATOR
DEATH_SOUND_GEN_BIT gequ 1|DEATH_SOUND_GENERATOR
FIRE_SOUND_GEN_BIT gequ 1|FIRE_SOUND_GENERATOR
KILL_SOUND_GEN_BIT gequ 1|KILL_SOUND_GENERATOR
SEGMENTS_SOUND_GEN_BIT gequ 1|SEGMENTS_SOUND_GENERATOR
SPIDER_SOUND_GEN_BIT gequ 1|SPIDER_SOUND_GENERATOR
SPRITE_SPEED_SLOW gequ 0
SPRITE_SPEED_FAST gequ 1

View File

@ -46,7 +46,7 @@ word randomMushroomOffset(void)
}
void setupSound(word soundNum, SoundParamBlock * soundParams, boolean looped)
void setupSound(word soundNum, SoundParamBlock * soundParams, word genNum, word numGenerators, boolean looped)
{
static word nextDocBuffer = 0;
@ -107,29 +107,21 @@ void setupSound(word soundNum, SoundParamBlock * soundParams, boolean looped)
else
soundParams->nextWavePtr = NULL;
FFSetUpSound((soundNum << 8) | 1, (Pointer)soundParams);
for (word i = 0; i < numGenerators; i++)
FFSetUpSound(((genNum + i) << 8) | 1, (Pointer)soundParams);
}
void loadSounds(void)
{
static SoundParamBlock spiderSound;
static SoundParamBlock deathSound;
static SoundParamBlock segmentsSound;
static SoundParamBlock bonus1Sound;
static SoundParamBlock bonus2Sound;
static SoundParamBlock bonus3Sound;
static SoundParamBlock killSound;
static SoundParamBlock fireSound;
static SoundParamBlock soundParams[8];
setupSound(SPIDER_SOUND, &spiderSound, TRUE);
setupSound(DEATH_SOUND, &deathSound, FALSE);
setupSound(SEGMENTS_SOUND, &segmentsSound, TRUE);
setupSound(BONUS1_SOUND, &bonus1Sound, FALSE);
setupSound(BONUS2_SOUND, &bonus2Sound, FALSE);
setupSound(BONUS3_SOUND, &bonus3Sound, FALSE);
setupSound(KILL_SOUND, &killSound, FALSE);
setupSound(FIRE_SOUND, &fireSound, FALSE);
setupSound(SPIDER_SOUND, soundParams, SPIDER_SOUND_GENERATOR, 1, TRUE);
setupSound(DEATH_SOUND, soundParams, DEATH_SOUND_GENERATOR, 1, FALSE);
setupSound(SEGMENTS_SOUND, soundParams, SEGMENTS_SOUND_GENERATOR, 1, TRUE);
setupSound(BONUS_SOUND, soundParams, BONUS1_SOUND_GENERATOR, 3, FALSE);
setupSound(KILL_SOUND, soundParams, KILL_SOUND_GENERATOR, 1, FALSE);
setupSound(FIRE_SOUND, soundParams, FIRE1_SOUND_GENERATOR, 5, FALSE);
}

View File

@ -17,9 +17,7 @@
/* Sounds */
#define rRawSound 1
#define BONUS1_SOUND 1
#define BONUS2_SOUND 2
#define BONUS3_SOUND 3
#define BONUS_SOUND 1
#define DEATH_SOUND 4
#define FIRE_SOUND 5
#define KILL_SOUND 6

View File

@ -48,9 +48,7 @@ type rRawSound {
hex string;
};
read rRawSound (BONUS1_SOUND) "sound/bonus.raw";
read rRawSound (BONUS2_SOUND) "sound/bonus.raw";
read rRawSound (BONUS3_SOUND) "sound/bonus.raw";
read rRawSound (BONUS_SOUND) "sound/bonus.raw";
read rRawSound (DEATH_SOUND) "sound/death.raw";
read rRawSound (FIRE_SOUND) "sound/fire.raw";
read rRawSound (KILL_SOUND) "sound/kill.raw";