diff options
| -rw-r--r-- | engines/kyra/sound_adlib.cpp | 34 | 
1 files changed, 31 insertions, 3 deletions
| diff --git a/engines/kyra/sound_adlib.cpp b/engines/kyra/sound_adlib.cpp index 2ee13a6bf6..a8380d03e8 100644 --- a/engines/kyra/sound_adlib.cpp +++ b/engines/kyra/sound_adlib.cpp @@ -817,10 +817,10 @@ void AdlibDriver::setInstrument(uint8 regOffset, uint8 *dataptr, OutputState &st  void AdlibDriver::updateAndOutput3(OutputState &state) {  	debugC(9, kDebugLevelSound, "updateAndOutput3(%d)", &state - _outputTables); -	// This sets the "note on" bit. -	state.regBx |= 0x20; -	// Octave / F-Number / Key-On +	// The "note on" bit is set, and the current note is played. + +	state.regBx |= 0x20;  	writeOPL(0xB0 + _curTable, state.regBx);  	int8 shift = 9 - state.unk33; @@ -879,6 +879,34 @@ void AdlibDriver::stateCallback1_1(OutputState &state) {  	state.regBx = value;  } +// This is presumably used for some sound effects, e.g. Malcolm entering and +// leaving Kallak's hut. Related functions and variables: +// +// updateCallback21() +//    - Initialises unk32, unk33, unk34, unk35 and unk36 +//    - unk32 is not further modified +//    - unk33 is not further modified +//    - unk34 is a countdown that gets reinitialised to unk35 on zero +//    - unk35 is based on unk34 and not further modified +//    - unk36 is not further modified +// +// updateAndOutput3() +//    - Plays the current note +//    - Updates unk37 with a new (lower?) frequency +//    - Copies unk36 to unk38. The unk38 variable is a countdown. +// +// unk32 - determines how often the notes are played +// unk33 - modifies the frequency +// unk34 - countdown, updates frequency on zero +// unk35 - initialiser for unk34 countdown +// unk36 - initialiser for unk38 countdown +// unk37 - frequency +// unk38 - countdown, stops playing on zero +// unk41 - determines how often the notes are played +// +// Note that unk41 is never initialised. Not that it should matter much, but it +// is a bit sloppy. +  void AdlibDriver::stateCallback1_2(OutputState &state) {  	debugC(9, kDebugLevelSound, "Calling stateCallback1_2 (channel: %d)", _curTable);  	if (state.unk38) { | 
