diff --git a/BuGS/gameFlea.s b/BuGS/gameFlea.s index 7587e12..e93083e 100644 --- a/BuGS/gameFlea.s +++ b/BuGS/gameFlea.s @@ -210,7 +210,6 @@ addFlea_fast anop lda #SPRITE_SPEED_FAST addFlea_setSpeed anop jsl setFleaSpeed - jsl startFleaSound lda #FLEA_STATE_FALLING sta fleaState @@ -236,6 +235,9 @@ addFlea_setSpeed anop sec sbc #6*SCREEN_BYTES_PER_ROW+3 sta fleaScreenOffset + + ldx fleaTileOffsets + jsl startFleaSound addFlea_done anop rtl @@ -291,6 +293,7 @@ shootFlea entry beq shootFlea_faster jsl explodeFlea + ldx fleaTileOffsets jsl playKillSound jmp scoreAddTwoHundred diff --git a/BuGS/gameMushroom.s b/BuGS/gameMushroom.s index 15eba58..7d7c409 100644 --- a/BuGS/gameMushroom.s +++ b/BuGS/gameMushroom.s @@ -78,8 +78,8 @@ resetMushrooms_keepChecking anop sta tileType,x lda #TILE_STATE_DIRTY sta tileDirty,x - jsl scoreAddFive jsl playBonusSound + jsl scoreAddFive ldx mushroomToRefresh lda #EXPLOSION_LAST_OFFSET sta mushroomExplosionSprite diff --git a/BuGS/gameScorpion.s b/BuGS/gameScorpion.s index f13fe90..9747347 100644 --- a/BuGS/gameScorpion.s +++ b/BuGS/gameScorpion.s @@ -371,6 +371,7 @@ shootScorpion entry inc a inc a sta scorpionScreenOffset + ldx scorpionTileOffsets+2 jsl playKillSound jmp scoreAddOneThousand diff --git a/BuGS/gameSegments.s b/BuGS/gameSegments.s index 89c41c2..fc2d6e9 100644 --- a/BuGS/gameSegments.s +++ b/BuGS/gameSegments.s @@ -1827,7 +1827,11 @@ isSegmentCollision_returnTrue anop ; Call this with the segment num * 2 in the X register shootSegment entry phx + ldy segmentPosOffset,x + ldx segmentCurrentTile,y jsl playKillSound + plx + phx lda segmentStates,x cmp #SEGMENT_STATE_BODY beq shootSegment_body diff --git a/BuGS/gameShot.s b/BuGS/gameShot.s index 057b026..2313314 100644 --- a/BuGS/gameShot.s +++ b/BuGS/gameShot.s @@ -79,7 +79,6 @@ updateShot_shifted anop updateShot_notNone anop cmp #SHOT_STATE_START_SHOOTING bne updateShot_shooting - jsl playFireSound lda SHOT_STATE_SHOOTING sta shotState lda #1 @@ -106,6 +105,7 @@ updateShot_findDirty anop tax lda tileBelow,x sta shotTileOffsetBelow + jsl playFireSound bra updateShot_drawShot updateShot_shooting anop diff --git a/BuGS/gameSound.s b/BuGS/gameSound.s index f946f85..ee10389 100644 --- a/BuGS/gameSound.s +++ b/BuGS/gameSound.s @@ -13,7 +13,7 @@ gameSound start using globalData using tileData - + using screenData SOUND_REG_FREQ_LOW equ $0000 @@ -26,65 +26,76 @@ SOUND_REG_SIZE equ $00c0 SOUND_HALTED equ 1 SOUND_STARTED equ 0 +; According to all of the documentation I can find, $00 should be the right speaker and +; $10 should be the left. But based on GSPlus and mame, I see the opposite. Still need +; to check on my HW. But in the end, it could be that some HW demultiplexed them backwards +; so there could be either out there in the wild. +SOUND_RIGHT_SPEAKER equ $10 +SOUND_LEFT_SPEAKER equ $00 + +; OSC 16 - 19 for L/R channels in swap mode SPIDER_SOUND_ADDR equ $0000 -SPIDER_OSC_NUM equ 8 +SPIDER_OSC_NUM equ 16 SPIDER_FREQ_HIGH equ 0 SPIDER_FREQ_LOW equ 214 -SPIDER_VOLUME equ 255 +SPIDER_VOLUME equ 128 SPIDER_CONTROL equ 6 SPIDER_SIZE equ $36 +; OSC 10 & 11 for L/R channels DEATH_SOUND_ADDR equ $4000 -DEATH_OSC_NUM equ 5 +DEATH_OSC_NUM equ 10 DEATH_FREQ_HIGH equ 0 DEATH_FREQ_LOW equ 214 -DEATH_VOLUME equ 255 +DEATH_VOLUME equ 80 DEATH_CONTROL equ 2 DEATH_SIZE equ $36 +; OSC 12 - 15 for L/R channels in swap mode SEGMENTS_SOUND_ADDR equ $7000 -SEGMENTS_OSC_NUM equ 6 +SEGMENTS_OSC_NUM equ 12 SEGMENTS_FREQ_HIGH equ 0 SEGMENTS_FREQ_LOW equ 214 -SEGMENTS_VOLUME equ 255 +SEGMENTS_VOLUME equ 80 SEGMENTS_CONTROL equ 6 SEGMENTS_SIZE equ $24 +; OSC 20 & 21 for L/R channels EXTRA_LIFE_SOUND_ADDR equ $8000 -EXTRA_LIFE_OSC_NUM equ 10 +EXTRA_LIFE_OSC_NUM equ 20 EXTRA_LIFE_FREQ_HIGH equ 0 EXTRA_LIFE_FREQ_LOW equ 107 -EXTRA_LIFE_VOLUME equ 255 +EXTRA_LIFE_VOLUME equ 128 EXTRA_LIFE_CONTROL equ 2 EXTRA_LIFE_SIZE equ $36 +; OSC 0 - 5 to have 3x L/R channels BONUS_SOUND_ADDR equ $b000 BONUS_OSC_NUM equ 0 BONUS_FREQ_HIGH equ 0 BONUS_FREQ_LOW equ 214 -BONUS_VOLUME equ 255 BONUS_CONTROL equ 2 BONUS_SIZE equ $24 +; OSC 8 & 9 for L/R channels KILL_SOUND_ADDR equ $c000 -KILL_OSC_NUM equ 4 +KILL_OSC_NUM equ 8 KILL_FREQ_HIGH equ 0 KILL_FREQ_LOW equ 214 -KILL_VOLUME equ 255 KILL_CONTROL equ 2 KILL_SIZE equ $24 +; OSC 6 & 7 for L/R channels FIRE_SOUND_ADDR equ $d000 -FIRE_OSC_NUM equ 3 +FIRE_OSC_NUM equ 6 FIRE_FREQ_HIGH equ 0 FIRE_FREQ_LOW equ 214 -FIRE_VOLUME equ 255 FIRE_CONTROL equ 2 FIRE_SIZE equ $1b +; OSC 22 - 25 for L/R channels in swap mode FLEA_SOUND_ADDR equ $3a00 -FLEA_OSC_NUM equ 12 -FLEA_VOLUME equ 255 +FLEA_OSC_NUM equ 22 FLEA_CONTROL equ 6 FLEA_SIZE equ $00 FLEA_FRAME_COUNT equ 5 @@ -202,9 +213,33 @@ soundInit_writeRegLow anop ldx #SOUND_REG_POINTER+SPIDER_OSC_NUM jsl writeConsecSoundReg - lda #SPIDER_CONTROL+SOUND_HALTED + lda #SPIDER_CONTROL+SOUND_HALTED+SOUND_RIGHT_SPEAKER ldx #SOUND_REG_CONTROL+SPIDER_OSC_NUM jsl writeConsecSoundReg + + lda #SPIDER_FREQ_LOW + ldx #SOUND_REG_FREQ_LOW+SPIDER_OSC_NUM+2 + jsl writeConsecSoundReg + + lda #SPIDER_FREQ_HIGH + ldx #SOUND_REG_FREQ_HIGH+SPIDER_OSC_NUM+2 + jsl writeConsecSoundReg + + lda #SPIDER_VOLUME + ldx #SOUND_REG_VOLUME+SPIDER_OSC_NUM+2 + jsl writeConsecSoundReg + + lda #SPIDER_SIZE + ldx #SOUND_REG_SIZE+SPIDER_OSC_NUM+2 + jsl writeConsecSoundReg + + lda #SPIDER_SOUND_ADDR/256 + ldx #SOUND_REG_POINTER+SPIDER_OSC_NUM+2 + jsl writeConsecSoundReg + + lda #SPIDER_CONTROL+SOUND_HALTED+SOUND_LEFT_SPEAKER + ldx #SOUND_REG_CONTROL+SPIDER_OSC_NUM+2 + jsl writeConsecSoundReg ; Death sound @@ -213,26 +248,30 @@ soundInit_writeRegLow anop lda #DEATH_FREQ_LOW ldx #SOUND_REG_FREQ_LOW+DEATH_OSC_NUM - jsl writeSoundReg + jsl writeConsecSoundReg lda #DEATH_FREQ_HIGH ldx #SOUND_REG_FREQ_HIGH+DEATH_OSC_NUM - jsl writeSoundReg + jsl writeConsecSoundReg lda #DEATH_VOLUME ldx #SOUND_REG_VOLUME+DEATH_OSC_NUM - jsl writeSoundReg + jsl writeConsecSoundReg lda #DEATH_SIZE ldx #SOUND_REG_SIZE+DEATH_OSC_NUM - jsl writeSoundReg + jsl writeConsecSoundReg lda #DEATH_SOUND_ADDR/256 ldx #SOUND_REG_POINTER+DEATH_OSC_NUM + jsl writeConsecSoundReg + + lda #DEATH_CONTROL+SOUND_HALTED+SOUND_RIGHT_SPEAKER + ldx #SOUND_REG_CONTROL+DEATH_OSC_NUM jsl writeSoundReg - lda #DEATH_CONTROL+SOUND_HALTED - ldx #SOUND_REG_CONTROL+DEATH_OSC_NUM + lda #DEATH_CONTROL+SOUND_HALTED+SOUND_LEFT_SPEAKER + ldx #SOUND_REG_CONTROL+DEATH_OSC_NUM+1 jsl writeSoundReg @@ -260,9 +299,33 @@ soundInit_writeRegLow anop ldx #SOUND_REG_POINTER+SEGMENTS_OSC_NUM jsl writeConsecSoundReg - lda #SEGMENTS_CONTROL+SOUND_HALTED + lda #SEGMENTS_CONTROL+SOUND_HALTED+SOUND_RIGHT_SPEAKER ldx #SOUND_REG_CONTROL+SEGMENTS_OSC_NUM jsl writeConsecSoundReg + + lda #SEGMENTS_FREQ_LOW + ldx #SOUND_REG_FREQ_LOW+SEGMENTS_OSC_NUM+2 + jsl writeConsecSoundReg + + lda #SEGMENTS_FREQ_HIGH + ldx #SOUND_REG_FREQ_HIGH+SEGMENTS_OSC_NUM+2 + jsl writeConsecSoundReg + + lda #SEGMENTS_VOLUME + ldx #SOUND_REG_VOLUME+SEGMENTS_OSC_NUM+2 + jsl writeConsecSoundReg + + lda #SEGMENTS_SIZE + ldx #SOUND_REG_SIZE+SEGMENTS_OSC_NUM+2 + jsl writeConsecSoundReg + + lda #SEGMENTS_SOUND_ADDR/256 + ldx #SOUND_REG_POINTER+SEGMENTS_OSC_NUM+2 + jsl writeConsecSoundReg + + lda #SEGMENTS_CONTROL+SOUND_HALTED+SOUND_LEFT_SPEAKER + ldx #SOUND_REG_CONTROL+SEGMENTS_OSC_NUM+2 + jsl writeConsecSoundReg ; Bonus sound @@ -271,74 +334,74 @@ soundInit_writeRegLow anop lda #BONUS_FREQ_LOW ldx #SOUND_REG_FREQ_LOW+BONUS_OSC_NUM - jsl writeSoundReg + jsl writeConsecSoundReg lda #BONUS_FREQ_HIGH ldx #SOUND_REG_FREQ_HIGH+BONUS_OSC_NUM - jsl writeSoundReg - - lda #BONUS_VOLUME - ldx #SOUND_REG_VOLUME+BONUS_OSC_NUM - jsl writeSoundReg + jsl writeConsecSoundReg lda #BONUS_SIZE ldx #SOUND_REG_SIZE+BONUS_OSC_NUM - jsl writeSoundReg + jsl writeConsecSoundReg lda #BONUS_SOUND_ADDR/256 ldx #SOUND_REG_POINTER+BONUS_OSC_NUM - jsl writeSoundReg + jsl writeConsecSoundReg - lda #BONUS_CONTROL+SOUND_HALTED + lda #BONUS_CONTROL+SOUND_HALTED+SOUND_RIGHT_SPEAKER ldx #SOUND_REG_CONTROL+BONUS_OSC_NUM jsl writeSoundReg - lda #BONUS_FREQ_LOW - ldx #SOUND_REG_FREQ_LOW+BONUS_OSC_NUM+1 - jsl writeSoundReg - - lda #BONUS_FREQ_HIGH - ldx #SOUND_REG_FREQ_HIGH+BONUS_OSC_NUM+1 - jsl writeSoundReg - - lda #BONUS_VOLUME - ldx #SOUND_REG_VOLUME+BONUS_OSC_NUM+1 - jsl writeSoundReg - - lda #BONUS_SIZE - ldx #SOUND_REG_SIZE+BONUS_OSC_NUM+1 - jsl writeSoundReg - - lda #BONUS_SOUND_ADDR/256 - ldx #SOUND_REG_POINTER+BONUS_OSC_NUM+1 - jsl writeSoundReg - - lda #BONUS_CONTROL+SOUND_HALTED + lda #BONUS_CONTROL+SOUND_HALTED+SOUND_LEFT_SPEAKER ldx #SOUND_REG_CONTROL+BONUS_OSC_NUM+1 jsl writeSoundReg lda #BONUS_FREQ_LOW ldx #SOUND_REG_FREQ_LOW+BONUS_OSC_NUM+2 - jsl writeSoundReg + jsl writeConsecSoundReg lda #BONUS_FREQ_HIGH ldx #SOUND_REG_FREQ_HIGH+BONUS_OSC_NUM+2 - jsl writeSoundReg - - lda #BONUS_VOLUME - ldx #SOUND_REG_VOLUME+BONUS_OSC_NUM+2 - jsl writeSoundReg + jsl writeConsecSoundReg lda #BONUS_SIZE ldx #SOUND_REG_SIZE+BONUS_OSC_NUM+2 - jsl writeSoundReg + jsl writeConsecSoundReg lda #BONUS_SOUND_ADDR/256 ldx #SOUND_REG_POINTER+BONUS_OSC_NUM+2 + jsl writeConsecSoundReg + + lda #BONUS_CONTROL+SOUND_HALTED+SOUND_RIGHT_SPEAKER + ldx #SOUND_REG_CONTROL+BONUS_OSC_NUM+2 jsl writeSoundReg - lda #BONUS_CONTROL+SOUND_HALTED - ldx #SOUND_REG_CONTROL+BONUS_OSC_NUM+2 + lda #BONUS_CONTROL+SOUND_HALTED+SOUND_LEFT_SPEAKER + ldx #SOUND_REG_CONTROL+BONUS_OSC_NUM+3 + jsl writeSoundReg + + lda #BONUS_FREQ_LOW + ldx #SOUND_REG_FREQ_LOW+BONUS_OSC_NUM+4 + jsl writeConsecSoundReg + + lda #BONUS_FREQ_HIGH + ldx #SOUND_REG_FREQ_HIGH+BONUS_OSC_NUM+4 + jsl writeConsecSoundReg + + lda #BONUS_SIZE + ldx #SOUND_REG_SIZE+BONUS_OSC_NUM+4 + jsl writeConsecSoundReg + + lda #BONUS_SOUND_ADDR/256 + ldx #SOUND_REG_POINTER+BONUS_OSC_NUM+4 + jsl writeConsecSoundReg + + lda #BONUS_CONTROL+SOUND_HALTED+SOUND_RIGHT_SPEAKER + ldx #SOUND_REG_CONTROL+BONUS_OSC_NUM+4 + jsl writeSoundReg + + lda #BONUS_CONTROL+SOUND_HALTED+SOUND_LEFT_SPEAKER + ldx #SOUND_REG_CONTROL+BONUS_OSC_NUM+5 jsl writeSoundReg ; Kill sound @@ -347,26 +410,26 @@ soundInit_writeRegLow anop lda #KILL_FREQ_LOW ldx #SOUND_REG_FREQ_LOW+KILL_OSC_NUM - jsl writeSoundReg + jsl writeConsecSoundReg lda #KILL_FREQ_HIGH ldx #SOUND_REG_FREQ_HIGH+KILL_OSC_NUM - jsl writeSoundReg - - lda #KILL_VOLUME - ldx #SOUND_REG_VOLUME+KILL_OSC_NUM - jsl writeSoundReg + jsl writeConsecSoundReg lda #KILL_SIZE ldx #SOUND_REG_SIZE+KILL_OSC_NUM - jsl writeSoundReg + jsl writeConsecSoundReg lda #KILL_SOUND_ADDR/256 ldx #SOUND_REG_POINTER+KILL_OSC_NUM + jsl writeConsecSoundReg + + lda #KILL_CONTROL+SOUND_HALTED+SOUND_RIGHT_SPEAKER + ldx #SOUND_REG_CONTROL+KILL_OSC_NUM jsl writeSoundReg - lda #KILL_CONTROL+SOUND_HALTED - ldx #SOUND_REG_CONTROL+KILL_OSC_NUM + lda #KILL_CONTROL+SOUND_HALTED+SOUND_LEFT_SPEAKER + ldx #SOUND_REG_CONTROL+KILL_OSC_NUM+1 jsl writeSoundReg @@ -376,26 +439,26 @@ soundInit_writeRegLow anop lda #FIRE_FREQ_LOW ldx #SOUND_REG_FREQ_LOW+FIRE_OSC_NUM - jsl writeSoundReg + jsl writeConsecSoundReg lda #FIRE_FREQ_HIGH ldx #SOUND_REG_FREQ_HIGH+FIRE_OSC_NUM - jsl writeSoundReg - - lda #FIRE_VOLUME - ldx #SOUND_REG_VOLUME+FIRE_OSC_NUM - jsl writeSoundReg + jsl writeConsecSoundReg lda #FIRE_SIZE ldx #SOUND_REG_SIZE+FIRE_OSC_NUM - jsl writeSoundReg + jsl writeConsecSoundReg lda #FIRE_SOUND_ADDR/256 ldx #SOUND_REG_POINTER+FIRE_OSC_NUM + jsl writeConsecSoundReg + + lda #FIRE_CONTROL+SOUND_HALTED+SOUND_RIGHT_SPEAKER + ldx #SOUND_REG_CONTROL+FIRE_OSC_NUM jsl writeSoundReg - lda #FIRE_CONTROL+SOUND_HALTED - ldx #SOUND_REG_CONTROL+FIRE_OSC_NUM + lda #FIRE_CONTROL+SOUND_HALTED+SOUND_LEFT_SPEAKER + ldx #SOUND_REG_CONTROL+FIRE_OSC_NUM+1 jsl writeSoundReg ; Extra life sound @@ -404,36 +467,36 @@ soundInit_writeRegLow anop lda #EXTRA_LIFE_FREQ_LOW ldx #SOUND_REG_FREQ_LOW+EXTRA_LIFE_OSC_NUM - jsl writeSoundReg + jsl writeConsecSoundReg lda #EXTRA_LIFE_FREQ_HIGH ldx #SOUND_REG_FREQ_HIGH+EXTRA_LIFE_OSC_NUM - jsl writeSoundReg + jsl writeConsecSoundReg lda #EXTRA_LIFE_VOLUME ldx #SOUND_REG_VOLUME+EXTRA_LIFE_OSC_NUM - jsl writeSoundReg + jsl writeConsecSoundReg lda #EXTRA_LIFE_SIZE ldx #SOUND_REG_SIZE+EXTRA_LIFE_OSC_NUM - jsl writeSoundReg + jsl writeConsecSoundReg lda #EXTRA_LIFE_SOUND_ADDR/256 ldx #SOUND_REG_POINTER+EXTRA_LIFE_OSC_NUM + jsl writeConsecSoundReg + + lda #EXTRA_LIFE_CONTROL+SOUND_HALTED+SOUND_RIGHT_SPEAKER + ldx #SOUND_REG_CONTROL+EXTRA_LIFE_OSC_NUM jsl writeSoundReg - lda #EXTRA_LIFE_CONTROL+SOUND_HALTED - ldx #SOUND_REG_CONTROL+EXTRA_LIFE_OSC_NUM + lda #EXTRA_LIFE_CONTROL+SOUND_HALTED+SOUND_LEFT_SPEAKER + ldx #SOUND_REG_CONTROL+EXTRA_LIFE_OSC_NUM+1 jsl writeSoundReg ; Flea sound pea FLEA_SOUND_ADDR jsl loadFleaSound - lda #FLEA_VOLUME - ldx #SOUND_REG_VOLUME+FLEA_OSC_NUM - jsl writeConsecSoundReg - lda #FLEA_SIZE ldx #SOUND_REG_SIZE+FLEA_OSC_NUM jsl writeConsecSoundReg @@ -442,10 +505,22 @@ soundInit_writeRegLow anop ldx #SOUND_REG_POINTER+FLEA_OSC_NUM jsl writeConsecSoundReg - lda #FLEA_CONTROL+SOUND_HALTED + lda #FLEA_CONTROL+SOUND_HALTED+SOUND_RIGHT_SPEAKER ldx #SOUND_REG_CONTROL+FLEA_OSC_NUM jsl writeConsecSoundReg + lda #FLEA_SIZE + ldx #SOUND_REG_SIZE+FLEA_OSC_NUM+2 + jsl writeConsecSoundReg + + lda #FLEA_SOUND_ADDR/256 + ldx #SOUND_REG_POINTER+FLEA_OSC_NUM+2 + jsl writeConsecSoundReg + + lda #FLEA_CONTROL+SOUND_HALTED+SOUND_LEFT_SPEAKER + ldx #SOUND_REG_CONTROL+FLEA_OSC_NUM+2 + jsl writeConsecSoundReg + rtl @@ -468,30 +543,67 @@ updateSounds_notDone anop sty fleaSoundFreqOffset lda fleaFreqs,y + pha ldx #SOUND_REG_FREQ_LOW+FLEA_OSC_NUM jsl writeConsecSoundReg + pla + ldx #SOUND_REG_FREQ_LOW+FLEA_OSC_NUM+2 + jsl writeConsecSoundReg ldy fleaSoundFreqOffset lda fleaFreqs+1,y + pha ldx #SOUND_REG_FREQ_HIGH+FLEA_OSC_NUM jsl writeConsecSoundReg + pla + ldx #SOUND_REG_FREQ_HIGH+FLEA_OSC_NUM+2 + jsl writeConsecSoundReg updateSounds_done anop rtl playBonusSound entry - lda #BONUS_CONTROL+SOUND_HALTED + lda tileRightVolume,x + pha + + lda #BONUS_CONTROL+SOUND_HALTED+SOUND_RIGHT_SPEAKER ldx bonusSoundOscReg jsl writeSoundReg - - lda #BONUS_CONTROL + + lda #BONUS_CONTROL+SOUND_HALTED+SOUND_LEFT_SPEAKER ldx bonusSoundOscReg + inx + jsl writeSoundReg + + lda bonusSoundOscReg + and #$1f + ora #SOUND_REG_VOLUME + tax + pla + pha + phx + jsl writeSoundReg + + plx + inx + pla + eor #$ff + jsl writeSoundReg + + lda #BONUS_CONTROL+SOUND_RIGHT_SPEAKER + ldx bonusSoundOscReg + jsl writeSoundReg + + lda #BONUS_CONTROL+SOUND_LEFT_SPEAKER + ldx bonusSoundOscReg + inx jsl writeSoundReg lda bonusSoundOscReg inc a - cmp #SOUND_REG_CONTROL+BONUS_OSC_NUM+3 + inc a + cmp #SOUND_REG_CONTROL+BONUS_OSC_NUM+6 blt playBonusSound_noWrap lda #SOUND_REG_CONTROL+BONUS_OSC_NUM playBonusSound_noWrap anop @@ -504,47 +616,122 @@ playDeathSound entry jsl stopFleaSound jsl stopScorpionSound jsl stopSegmentSound - - lda #DEATH_CONTROL+SOUND_HALTED + + lda #DEATH_CONTROL+SOUND_HALTED+SOUND_RIGHT_SPEAKER ldx #SOUND_REG_CONTROL+DEATH_OSC_NUM jsl writeSoundReg + + lda #DEATH_CONTROL+SOUND_HALTED+SOUND_LEFT_SPEAKER + ldx #SOUND_REG_CONTROL+DEATH_OSC_NUM+1 + jsl writeSoundReg + + lda mouseAddress + sec + sbc #SCREEN_ADDRESS + and #$fffc + tax + lda >screenToTileOffset,x + tax + lda tileRightVolume,x + pha + ldx #SOUND_REG_VOLUME+DEATH_OSC_NUM + jsl writeSoundReg + + pla + eor #$ff + ldx #SOUND_REG_VOLUME+DEATH_OSC_NUM+1 + jsl writeSoundReg - lda #DEATH_CONTROL + lda #DEATH_CONTROL+SOUND_RIGHT_SPEAKER ldx #SOUND_REG_CONTROL+DEATH_OSC_NUM jsl writeSoundReg + + lda #DEATH_CONTROL+SOUND_LEFT_SPEAKER + ldx #SOUND_REG_CONTROL+DEATH_OSC_NUM+1 + jsl writeSoundReg rtl playKillSound entry - lda #KILL_CONTROL+SOUND_HALTED + lda tileRightVolume,x + pha + + lda #KILL_CONTROL+SOUND_HALTED+SOUND_RIGHT_SPEAKER ldx #SOUND_REG_CONTROL+KILL_OSC_NUM jsl writeSoundReg + + lda #KILL_CONTROL+SOUND_HALTED+SOUND_LEFT_SPEAKER + ldx #SOUND_REG_CONTROL+KILL_OSC_NUM+1 + jsl writeSoundReg + + pla + pha + ldx #SOUND_REG_VOLUME+KILL_OSC_NUM + jsl writeSoundReg + + pla + eor #$ff + ldx #SOUND_REG_VOLUME+KILL_OSC_NUM+1 + jsl writeSoundReg - lda #KILL_CONTROL + lda #KILL_CONTROL+SOUND_RIGHT_SPEAKER ldx #SOUND_REG_CONTROL+KILL_OSC_NUM jsl writeSoundReg + + lda #KILL_CONTROL+SOUND_LEFT_SPEAKER + ldx #SOUND_REG_CONTROL+KILL_OSC_NUM+1 + jsl writeSoundReg rtl playFireSound entry - lda #FIRE_CONTROL+SOUND_HALTED + lda tileRightVolume,x + pha + + lda #FIRE_CONTROL+SOUND_HALTED+SOUND_RIGHT_SPEAKER ldx #SOUND_REG_CONTROL+FIRE_OSC_NUM jsl writeSoundReg - lda #FIRE_CONTROL + lda #FIRE_CONTROL+SOUND_HALTED+SOUND_LEFT_SPEAKER + ldx #SOUND_REG_CONTROL+FIRE_OSC_NUM+1 + jsl writeSoundReg + + pla + pha + ldx #SOUND_REG_VOLUME+FIRE_OSC_NUM + jsl writeSoundReg + + pla + eor #$ff + ldx #SOUND_REG_VOLUME+FIRE_OSC_NUM+1 + jsl writeSoundReg + + lda #FIRE_CONTROL+SOUND_RIGHT_SPEAKER ldx #SOUND_REG_CONTROL+FIRE_OSC_NUM jsl writeSoundReg + + lda #FIRE_CONTROL+SOUND_LEFT_SPEAKER + ldx #SOUND_REG_CONTROL+FIRE_OSC_NUM+1 + jsl writeSoundReg rtl playExtraLifeSound entry - lda #EXTRA_LIFE_CONTROL+SOUND_HALTED + lda #EXTRA_LIFE_CONTROL+SOUND_HALTED+SOUND_RIGHT_SPEAKER ldx #SOUND_REG_CONTROL+EXTRA_LIFE_OSC_NUM jsl writeSoundReg + + lda #EXTRA_LIFE_CONTROL+SOUND_HALTED+SOUND_LEFT_SPEAKER + ldx #SOUND_REG_CONTROL+EXTRA_LIFE_OSC_NUM+1 + jsl writeSoundReg - lda #EXTRA_LIFE_CONTROL + lda #EXTRA_LIFE_CONTROL+SOUND_RIGHT_SPEAKER ldx #SOUND_REG_CONTROL+EXTRA_LIFE_OSC_NUM jsl writeSoundReg + + lda #EXTRA_LIFE_CONTROL+SOUND_LEFT_SPEAKER + ldx #SOUND_REG_CONTROL+EXTRA_LIFE_OSC_NUM+1 + jsl writeSoundReg rtl @@ -552,34 +739,77 @@ playExtraLifeSound entry startSegmentSound entry jsl stopSegmentSound - lda #SEGMENTS_CONTROL + lda #SEGMENTS_CONTROL+SOUND_RIGHT_SPEAKER ldx #SOUND_REG_CONTROL+SEGMENTS_OSC_NUM jsl writeSoundReg + + lda #SEGMENTS_CONTROL+SOUND_LEFT_SPEAKER + ldx #SOUND_REG_CONTROL+SEGMENTS_OSC_NUM+2 + jsl writeSoundReg + rtl stopSegmentSound entry - lda #SEGMENTS_CONTROL+SOUND_HALTED + lda #SEGMENTS_CONTROL+SOUND_HALTED+SOUND_RIGHT_SPEAKER ldx #SOUND_REG_CONTROL+SEGMENTS_OSC_NUM jsl writeConsecSoundReg + lda #SEGMENTS_CONTROL+SOUND_HALTED+SOUND_LEFT_SPEAKER + ldx #SOUND_REG_CONTROL+SEGMENTS_OSC_NUM+2 + jsl writeConsecSoundReg + rtl startSpiderSound entry + lda tileRightVolume,x + pha jsl stopSpiderSound + + pla + pha + ldx #SOUND_REG_VOLUME+SPIDER_OSC_NUM + jsl writeConsecSoundReg + + pla + eor #$ff + ldx #SOUND_REG_VOLUME+SPIDER_OSC_NUM+2 + jsl writeConsecSoundReg - lda #SPIDER_CONTROL + lda #SPIDER_CONTROL+SOUND_RIGHT_SPEAKER ldx #SOUND_REG_CONTROL+SPIDER_OSC_NUM jsl writeSoundReg + + lda #SPIDER_CONTROL+SOUND_LEFT_SPEAKER + ldx #SOUND_REG_CONTROL+SPIDER_OSC_NUM+2 + jsl writeSoundReg rtl + +updateSpiderSound entry + lda tileRightVolume,x + pha + ldx #SOUND_REG_VOLUME+SPIDER_OSC_NUM + jsl writeConsecSoundReg + + pla + eor #$ff + ldx #SOUND_REG_VOLUME+SPIDER_OSC_NUM+2 + jsl writeConsecSoundReg + + rtl + stopSpiderSound entry - lda #SPIDER_CONTROL+SOUND_HALTED + lda #SPIDER_CONTROL+SOUND_HALTED+SOUND_RIGHT_SPEAKER ldx #SOUND_REG_CONTROL+SPIDER_OSC_NUM jsl writeConsecSoundReg + lda #SPIDER_CONTROL+SOUND_HALTED+SOUND_LEFT_SPEAKER + ldx #SOUND_REG_CONTROL+SPIDER_OSC_NUM+2 + jsl writeConsecSoundReg + rtl @@ -602,28 +832,54 @@ startFleaSound_doIt anop stz fleaSoundIsPlaying stz fleaSoundFreqOffset + lda tileRightVolume,x + pha + ldx #SOUND_REG_VOLUME+FLEA_OSC_NUM + jsl writeConsecSoundReg + + pla + eor #$ff + ldx #SOUND_REG_VOLUME+FLEA_OSC_NUM+2 + jsl writeConsecSoundReg + lda #FLEA_FRAME_COUNT sta fleaSoundFrame lda fleaFreqs ldx #SOUND_REG_FREQ_LOW+FLEA_OSC_NUM jsl writeConsecSoundReg + + lda fleaFreqs + ldx #SOUND_REG_FREQ_LOW+FLEA_OSC_NUM+2 + jsl writeConsecSoundReg lda fleaFreqs+1 ldx #SOUND_REG_FREQ_HIGH+FLEA_OSC_NUM jsl writeConsecSoundReg - lda #FLEA_CONTROL + lda fleaFreqs+1 + ldx #SOUND_REG_FREQ_HIGH+FLEA_OSC_NUM+2 + jsl writeConsecSoundReg + + lda #FLEA_CONTROL+SOUND_RIGHT_SPEAKER ldx #SOUND_REG_CONTROL+FLEA_OSC_NUM jsl writeSoundReg + + lda #FLEA_CONTROL+SOUND_LEFT_SPEAKER + ldx #SOUND_REG_CONTROL+FLEA_OSC_NUM+2 + jsl writeSoundReg rtl stopFleaSound entry - lda #FLEA_CONTROL+SOUND_HALTED + lda #FLEA_CONTROL+SOUND_HALTED+SOUND_RIGHT_SPEAKER ldx #SOUND_REG_CONTROL+FLEA_OSC_NUM jsl writeConsecSoundReg + lda #FLEA_CONTROL+SOUND_HALTED+SOUND_LEFT_SPEAKER + ldx #SOUND_REG_CONTROL+FLEA_OSC_NUM+2 + jsl writeConsecSoundReg + lda #1 sta fleaSoundIsPlaying rtl diff --git a/BuGS/gameSpider.s b/BuGS/gameSpider.s index c9e6a5e..ff3fa0c 100644 --- a/BuGS/gameSpider.s +++ b/BuGS/gameSpider.s @@ -385,7 +385,9 @@ updateSpider_tilesRight_cont anop stx spiderTileOffsets+4 lda tileRight,x sta spiderTileOffsets - rtl + + ldx spiderTileOffsets+6 + jmp updateSpiderSound updateSpider_tilesLeft anop ldx spiderTileOffsets+4 @@ -407,8 +409,9 @@ updateSpider_tilesLeft_cont anop stx spiderTileOffsets+4 lda tileLeft,x sta spiderTileOffsets+8 - - rtl + + ldx spiderTileOffsets+6 + jmp updateSpiderSound updateSpider_tilesUp anop lda spiderMaxShiftInTile @@ -446,7 +449,9 @@ updateSpider_tilesUpCont anop stx spiderTileOffsets+8 lda tileAbove,x sta spiderTileOffsets+10 - rtl + + ldx spiderTileOffsets+6 + jmp updateSpiderSound updateSpider_upChangeDir anop lda #GAME_NUM_TILES_TALL-1 @@ -521,7 +526,9 @@ updateSpider_tilesDownCont anop stx spiderTileOffsets+10 lda tileBelow,x sta spiderTileOffsets+8 - rtl + + ldx spiderTileOffsets+6 + jmp updateSpiderSound updateSpider_downChangeDir anop lda spiderTargetRow @@ -570,7 +577,6 @@ addSpider entry rtl addSpider_checkSpeed anop - jsl startSpiderSound lda gameScore+2 bne addSpider_fast lda gameScore @@ -669,6 +675,9 @@ addSpider_left anop tax lda tileAbove,x sta spiderTileOffsets+2 + + ldx spiderTileOffsets+6 + jsl startSpiderSound rtl @@ -703,7 +712,10 @@ addSpider_right anop tax lda tileAbove,x sta spiderTileOffsets+10 - + + ldx spiderTileOffsets+6 + jsl startSpiderSound + rtl @@ -812,6 +824,7 @@ shootSpider entry cmp #SPIDER_STATE_LEFT_DIAG_DOWN blt shootSpider_done + ldx spiderTileOffsets+6 jsl playKillSound jsl explodeSpider cmp mouseAddress diff --git a/BuGS/genData.pl b/BuGS/genData.pl index 908f15b..d0fb47f 100755 --- a/BuGS/genData.pl +++ b/BuGS/genData.pl @@ -92,6 +92,7 @@ our @gTileLeft = ("INVALID_TILE_NUM") x $gEquates{"TOTAL_NUM_TILES"}; our @gTileRight = ("INVALID_TILE_NUM") x $gEquates{"TOTAL_NUM_TILES"}; our @gTileBitOffset = (0) x $gEquates{"NUM_GAME_TILES"}; our @gTileBitMask = (0) x $gEquates{"NUM_GAME_TILES"}; +our @gTileRightVolume = (0) x $gEquates{"TOTAL_NUM_TILES"}; our @gDirtyNonGameTiles = ("INVALID_TILE_NUM") x $gEquates{"NUM_NON_GAME_TILES"}; our $gNumDirtyNonGameTiles = 0; @@ -259,6 +260,8 @@ sub initTiles $gTileRight[$lhsTileIndex] = lhsXYToTileOffset($tileX + 1, $tileY); } + $gTileRightVolume[$lhsTileIndex] = 0; + $lhsTileIndex++; $lastOffset += $gEquates{"TILE_BYTE_WIDTH"}; @@ -307,6 +310,8 @@ sub initTiles $gTileRight[$tileIndex] = gameXYToTileOffset($tileX + 1, $tileY); } + $gTileRightVolume[$tileIndex] = $tileX * 255 / ($gEquates{"GAME_NUM_TILES_WIDE"} - 1); + $tileIndex++; if ($bitMask == 0x8000) @@ -359,6 +364,8 @@ sub initTiles $gTileRight[$rhsTileIndex] = rhsXYToTileOffset($tileX + 1, $tileY); } + $gTileRightVolume[$rhsTileIndex] = 255; + $rhsTileIndex++; $lastOffset += $gEquates{"TILE_BYTE_WIDTH"}; @@ -503,6 +510,7 @@ printTileData($fh, "tileLeft", @gTileLeft); printTileData($fh, "tileRight", @gTileRight); printTileData($fh, "tileBitOffset", @gTileBitOffset); printTileData($fh, "tileBitMask", @gTileBitMask); +printTileData($fh, "tileRightVolume", @gTileRightVolume); printTileData($fh, "dirtyNonGameTiles", @gDirtyNonGameTiles); printTileData($fh, "fleaFreqs", @gFleaFreqs); printTileData($fh, "mouseYAddress", @gMouseYAddress);