From bae931aaa6384d95197539532a91cc2e77a0f807 Mon Sep 17 00:00:00 2001 From: Jeremy Rand Date: Thu, 10 Dec 2020 00:45:48 -0500 Subject: [PATCH] Add sounds for shooting, killing bugs, dying and resetting mushrooms after death. The shoot sound isn't great because it doesn't restart when rapid fire is happening but this is a start. --- BuGS/gameFlea.s | 2 +- BuGS/gameMushroom.s | 29 ++++++++++++++++++++----- BuGS/gamePlayer.s | 7 ++++-- BuGS/gameScorpion.s | 1 + BuGS/gameSegments.s | 1 + BuGS/gameShot.s | 11 +++++++++- BuGS/gameSpider.s | 3 ++- BuGS/globals.s | 19 ++++++++++++++++ BuGS/main.c | 53 ++++++++++++++++++++++++++++++++++++++++----- BuGS/main.h | 14 +++++++----- BuGS/main.rez | 4 +++- 11 files changed, 122 insertions(+), 22 deletions(-) diff --git a/BuGS/gameFlea.s b/BuGS/gameFlea.s index 954f2cc..58cca99 100644 --- a/BuGS/gameFlea.s +++ b/BuGS/gameFlea.s @@ -288,7 +288,7 @@ shootFlea entry beq shootFlea_faster jsl explodeFlea - + ~FFStartPlaying #KILL_SOUND_GEN_BIT jmp scoreAddTwoHundred shootFlea_faster anop diff --git a/BuGS/gameMushroom.s b/BuGS/gameMushroom.s index 594f79b..71c893b 100644 --- a/BuGS/gameMushroom.s +++ b/BuGS/gameMushroom.s @@ -50,10 +50,13 @@ resetMushrooms_jumpInst anop nop resetMushrooms_doneReset anop - txa - inx - inx - bra resetMushrooms_loop + lda mushroomRefreshWait + beq resetMushrooms_next + dec a + sta mushroomRefreshWait + sec + rtl + resetMushrooms_startFromBeginning anop ldx #0 @@ -73,10 +76,24 @@ resetMushrooms_keepChecking anop stx mushroomToRefresh lda #TILE_MUSHROOM4 sta tileType,x + lda #TILE_STATE_DIRTY + sta tileDirty,x jsl scoreAddFive + ~FFStartPlaying mushroomSound + lda mushroomSound + asl a + and #BONUS2_SOUND_GEN_BIT+BONUS3_SOUND_GEN_BIT + bne resetMushrooms_doneSound + lda #BONUS1_SOUND_GEN_BIT +resetMushrooms_doneSound anop + sta mushroomSound ldx mushroomToRefresh lda #EXPLOSION_LAST_OFFSET - bra resetMushrooms_explode + sta mushroomExplosionSprite + lda #2 + sta mushroomRefreshWait + sec + rtl resetMushrooms_next anop inx @@ -149,6 +166,8 @@ shootMushroom_done anop mushroomToRefresh dc i2'INVALID_TILE_NUM' mushroomExplosionSprite dc i2'0' +mushroomSound dc i2'BONUS1_SOUND_GEN_BIT' +mushroomRefreshWait dc i2'0' end diff --git a/BuGS/gamePlayer.s b/BuGS/gamePlayer.s index 4687c45..17cadb4 100644 --- a/BuGS/gamePlayer.s +++ b/BuGS/gamePlayer.s @@ -15,7 +15,7 @@ gamePlayer start using tileData using screenData -PLAYER_EXPLOSION_FRAME_COUNT equ 4 +PLAYER_EXPLOSION_FRAME_COUNT equ 3 PLAYER_RESTART_LEVEL_FRAME_COUNT equ 20 @@ -112,6 +112,8 @@ updatePlayer_nextExplosion anop sec sbc #4 sta playerExplosionOffset + lda #PLAYER_EXPLOSION_FRAME_COUNT + sta playerFrameCount bra updatePlayer_drawExplosion updatePlayer_doneExplosion anop lda #PLAYER_STATE_MUSHROOMS @@ -486,10 +488,11 @@ updatePlayer_explosionOffLeft anop sta mouseAddress updatePlayer_contCollision anop - lda #PLAYER_EXPLOSION_FRAME_COUNT-1 + lda #PLAYER_EXPLOSION_FRAME_COUNT sta playerFrameCount lda #SHIP_EXPLOSION_LAST_OFFSET sta playerExplosionOffset + ~FFStartPlaying #DEATH_SOUND_GEN_BIT jmp updatePlayer_exploding updatePlayer_noCollision anop diff --git a/BuGS/gameScorpion.s b/BuGS/gameScorpion.s index b87842d..4341803 100644 --- a/BuGS/gameScorpion.s +++ b/BuGS/gameScorpion.s @@ -371,6 +371,7 @@ shootScorpion entry inc a inc a sta scorpionScreenOffset + ~FFStartPlaying #KILL_SOUND_GEN_BIT jmp scoreAddOneThousand shootScorpion_done anop diff --git a/BuGS/gameSegments.s b/BuGS/gameSegments.s index 26c5929..076414c 100644 --- a/BuGS/gameSegments.s +++ b/BuGS/gameSegments.s @@ -1781,6 +1781,7 @@ isSegmentCollision_returnTrue anop ; Call this with the segment num * 2 in the X register shootSegment entry phx + ~FFStartPlaying #KILL_SOUND_GEN_BIT lda segmentStates,x cmp #SEGMENT_STATE_BODY beq shootSegment_body diff --git a/BuGS/gameShot.s b/BuGS/gameShot.s index 06e89bb..7256898 100644 --- a/BuGS/gameShot.s +++ b/BuGS/gameShot.s @@ -75,6 +75,13 @@ 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 lda SHOT_STATE_SHOOTING sta shotState lda #1 @@ -141,7 +148,9 @@ updateShot_checkCollision anop rtl updateShot_collision anop cpx #SCREEN_ADDRESS - blt updateShot_done + bge updateShot_onScreen + rtl +updateShot_onScreen anop and #$3333 bne updateShot_maybeMushroom diff --git a/BuGS/gameSpider.s b/BuGS/gameSpider.s index 476b7cb..19b12a1 100644 --- a/BuGS/gameSpider.s +++ b/BuGS/gameSpider.s @@ -809,7 +809,8 @@ shootSpider entry lda spiderState cmp #SPIDER_STATE_LEFT_DIAG_DOWN blt shootSpider_done - + + ~FFStartPlaying #KILL_SOUND_GEN_BIT jsl explodeSpider cmp mouseAddress blt shootSpider_playerBelow diff --git a/BuGS/globals.s b/BuGS/globals.s index adba435..e2e329d 100644 --- a/BuGS/globals.s +++ b/BuGS/globals.s @@ -105,6 +105,25 @@ 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 diff --git a/BuGS/main.c b/BuGS/main.c index 15aab20..955b367 100644 --- a/BuGS/main.c +++ b/BuGS/main.c @@ -60,8 +60,48 @@ void setupSound(word soundNum, SoundParamBlock * soundParams, boolean looped) soundParams->volSetting = 255; soundParams->waveStart = *handle; soundParams->waveSize = (handleSize / 256) + 1; - soundParams->bufferSize = 0; - nextDocBuffer += (soundParams->waveSize * 256); + + if (handleSize > 16384) + { + soundParams->bufferSize = 7; + nextDocBuffer += 32768; + } + else if (handleSize > 8192) + { + soundParams->bufferSize = 6; + nextDocBuffer += 16384; + } + else if (handleSize > 4096) + { + soundParams->bufferSize = 5; + nextDocBuffer += 8192; + } + else if (handleSize > 2048) + { + soundParams->bufferSize = 4; + nextDocBuffer += 4096; + } + else if (handleSize > 1024) + { + soundParams->bufferSize = 3; + nextDocBuffer += 2048; + } + else if (handleSize > 512) + { + soundParams->bufferSize = 2; + nextDocBuffer += 1024; + } + else if (handleSize > 256) + { + soundParams->bufferSize = 1; + nextDocBuffer += 512; + } + else + { + soundParams->bufferSize = 0; + nextDocBuffer += 256; + } + if (looped) soundParams->nextWavePtr = soundParams; else @@ -76,17 +116,20 @@ void loadSounds(void) static SoundParamBlock spiderSound; static SoundParamBlock deathSound; static SoundParamBlock segmentsSound; - static SoundParamBlock bonusSound; + static SoundParamBlock bonus1Sound; + static SoundParamBlock bonus2Sound; + static SoundParamBlock bonus3Sound; static SoundParamBlock killSound; static SoundParamBlock fireSound; setupSound(SPIDER_SOUND, &spiderSound, TRUE); setupSound(DEATH_SOUND, &deathSound, FALSE); setupSound(SEGMENTS_SOUND, &segmentsSound, TRUE); - setupSound(BONUS_SOUND, &bonusSound, FALSE); + 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); - // FFStartPlaying(1 << SEGMENTS_SOUND); } diff --git a/BuGS/main.h b/BuGS/main.h index 928e1f3..1f96a47 100644 --- a/BuGS/main.h +++ b/BuGS/main.h @@ -17,12 +17,14 @@ /* Sounds */ #define rRawSound 1 -#define BONUS_SOUND 1 -#define DEATH_SOUND 2 -#define FIRE_SOUND 3 -#define KILL_SOUND 4 -#define SEGMENTS_SOUND 5 -#define SPIDER_SOUND 6 +#define BONUS1_SOUND 1 +#define BONUS2_SOUND 2 +#define BONUS3_SOUND 3 +#define DEATH_SOUND 4 +#define FIRE_SOUND 5 +#define KILL_SOUND 6 +#define SEGMENTS_SOUND 7 +#define SPIDER_SOUND 8 #endif /* defined(_GUARD_PROJECTBuGS_FILEmain_) */ diff --git a/BuGS/main.rez b/BuGS/main.rez index 7982854..2a8b61c 100644 --- a/BuGS/main.rez +++ b/BuGS/main.rez @@ -48,7 +48,9 @@ type rRawSound { hex string; }; -read rRawSound (BONUS_SOUND) "sound/bonus.raw"; +read rRawSound (BONUS1_SOUND) "sound/bonus.raw"; +read rRawSound (BONUS2_SOUND) "sound/bonus.raw"; +read rRawSound (BONUS3_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";