Prev: 65247 Up: Map
65280: Play Sounds
Used by the routines at RunHandlers and Sounds_Telecast.
PlaySounds 65280 LD A,(65421) Return if no sound(s) are set to play (via *MelodyID).
65283 AND A
65284 RET Z
65285 LD L,A Store the melody ID in L temporarily.
Reset the *MelodyID (so it doesn't carry on playing).
65286 XOR A Write 0 to *MelodyID.
65287 LD (65421),A
65290 LD A,L Restore the melody ID back to A.
Handle special cases for the in-game buildings crumbling and then collapsing.
65291 CP 8 Jump to InitSound_BuildingCollapsing if the melody is for the building collapsing (8).
65293 JR Z,InitSound_BuildingCollapsing
65295 CP 9 Jump to InitSound_BuildingCrumbling if the melody is for the building crumbling (9).
65297 JR Z,InitSound_BuildingCrumbling
Fetch the melody data using the melody ID as an offset.
65299 DEC A Decrease the melody ID by one for the table lookup.
65300 ADD A,A Multiple the melody ID by 8 as the table holds eight bytes of data for the melodies.
65301 ADD A,A
65302 ADD A,A
65303 LD H,0 Create an offset using HL.
65305 LD L,A
65306 LD DE,65422 HL+=Table_Melodies.
65309 ADD HL,DE
65310 LD DE,65413 DE=MelodyBuffer.
65313 LD BC,8 BC=0008.
65316 LDIR Copy the selected melody data into MelodyBuffer.
65318 LD A,(65420) Jump to PlaySounds_Loop if *65420 is equal to 2.
65321 CP 2
65323 JR Z,PlaySounds_Loop
PlaySounds_Loop 65325 LD A,(65419) Jump to Sounds_SpeakerOff if *65419 is zero.
65328 AND A
65329 JR Z,Sounds_SpeakerOff
65331 DEC A Decrease A by one.
65332 LD (65419),A Write A to *65419.
65335 CALL PlayBeeper Call PlayBeeper.
65338 ADD HL,BC HL+=BC.
65339 LD (65413),HL Write HL to *MelodyBuffer.
65342 JR PlaySounds_Loop Jump to PlaySounds_Loop.
Unused_PlaySound_Loop 65344 LD A,(65419) Jump to Sounds_SpeakerOff if *65419 is zero.
65347 AND A
65348 JR Z,Sounds_SpeakerOff
65350 DEC A Decrease A by one.
65351 LD (65419),A Write A to *65419.
65354 CALL PlayBeeper Call PlayBeeper.
65357 OR A Set the bits from A.
65358 SBC HL,BC HL-=BC.
65360 LD (65413),HL Write HL to *MelodyBuffer.
65363 JR Unused_PlaySound_Loop Jump to Unused_PlaySound_Loop.
PlayBeeper 65365 LD HL,(65413) HL=Loop delay parameter (*65413).
65368 LD DE,(65415) DE=Number of passes to make through the sound generation loop (*65415).
65372 CALL 949 Call BEEPER.
65375 LD HL,(65413) HL=*MelodyBuffer.
65378 LD BC,(65417) BC=*65417.
65382 RET Return.
Flip speaker off (unset bit 4).
Sounds_SpeakerOff 65383 XOR A Speaker off.
65384 OUT (254),A
65386 RET Return.
InitSound_BuildingCollapsing 65387 LD HL,125 HL=0125.
65390 LD C,100 C=100.
65392 JR PlaySounds_Building_Loop Jump to PlaySounds_Building_Loop.
InitSound_BuildingCrumbling 65394 LD HL,250 HL=0250.
65397 LD C,25 C=25.
PlaySounds_Building_Loop 65399 LD A,(HL) A=*HL.
65400 AND %11111000 Keep only bits 3-7.
65402 OUT (254),A OUT 254
65404 LD B,C B=C.
PlaySounds_Building_Delay 65405 DJNZ PlaySounds_Building_Delay Decrease counter by one and loop back to PlaySounds_Building_Delay until counter is zero.
65407 DEC HL Decrease HL by one.
65408 LD A,H Jump to PlaySounds_Building_Loop until HL is zero.
65409 OR L
65410 JR NZ,PlaySounds_Building_Loop
65412 RET Return.
MelodyBuffer 65413 DEFB 0,0
65415 DEFB 0,0
65417 DEFB 0,0
65419 DEFB 0
65420 DEFB 0
MelodyID 65421 DEFB 0
Table_Melodies 65422 DEFB 244,1,0,0,50,0,10,1
65430 DEFB 244,1,0,0,244,1,1,2
65438 DEFB 150,0,244,1,200,0,1,2
65446 DEFB 100,0,25,0,100,0,4,0
65454 DEFB 232,3,1,0,232,3,5,1
65462 DEFB 232,3,1,0,244,1,6,1
65470 DEFB 150,0,44,1,200,0,1,2
65478 DEFB 66,0,0,60,66,66,66,66
65486 DEFB 60,0,0,124,66,66,124,64
65494 DEFB 64,0,0,60,66,66,82,74
65502 DEFB 60,0,0,124,66,66,124,68
65510 DEFB 66,0,0,60,64,60,2,66
65518 DEFB 60,0,0,254,16,16,16,16
65526 DEFB 16,0,0,66,66,66,66,66
65534 DEFB 60,0
Prev: 65247 Up: Map