[Scummvm-cvs-logs] SF.net SVN: scummvm:[33925] scummvm/branches/gsoc2008-tfmx

marwanhilmi at users.sourceforge.net marwanhilmi at users.sourceforge.net
Sat Aug 16 06:41:27 CEST 2008


Revision: 33925
          http://scummvm.svn.sourceforge.net/scummvm/?rev=33925&view=rev
Author:   marwanhilmi
Date:     2008-08-16 04:41:26 +0000 (Sat, 16 Aug 2008)

Log Message:
-----------
Added keyUp/looping functionality. Still needs some tweaking.

Modified Paths:
--------------
    scummvm/branches/gsoc2008-tfmx/base/main.cpp
    scummvm/branches/gsoc2008-tfmx/sound/mods/tfmx.cpp
    scummvm/branches/gsoc2008-tfmx/sound/mods/tfmx.h

Modified: scummvm/branches/gsoc2008-tfmx/base/main.cpp
===================================================================
--- scummvm/branches/gsoc2008-tfmx/base/main.cpp	2008-08-16 04:30:01 UTC (rev 33924)
+++ scummvm/branches/gsoc2008-tfmx/base/main.cpp	2008-08-16 04:41:26 UTC (rev 33925)
@@ -304,13 +304,12 @@
 	}
 	//*/
 		
+	///*
 	//if (_aTfmx.loadSong(0)) {
 	//	_aTfmx.testMacro(0x17);
 	//}
-	
-	
+	//*/
 
-
 	system.getMixer()->playInputStream( Audio::Mixer::kMusicSoundType, &_handle, &_aTfmx, -1, 255, 0, false);
 	system.delayMillis( 999999 );
 	//Tfmx test end.

Modified: scummvm/branches/gsoc2008-tfmx/sound/mods/tfmx.cpp
===================================================================
--- scummvm/branches/gsoc2008-tfmx/sound/mods/tfmx.cpp	2008-08-16 04:30:01 UTC (rev 33924)
+++ scummvm/branches/gsoc2008-tfmx/sound/mods/tfmx.cpp	2008-08-16 04:41:26 UTC (rev 33925)
@@ -187,7 +187,7 @@
 		_tracks[track].activeMacro.noteType = 0;
 		_tracks[track].activeMacro.noteWait = 0;
 		_tracks[track].activeMacro.fineTune = 0;
-		_tracks[track].activeMacro.keyUp = false;
+		_tracks[track].activeMacro.keyWaitOn = false;
 		_tracks[track].activeMacro.keyCount = 0;
 		_tracks[track].activeMacro.keyWait = 0;
 	}
@@ -200,6 +200,7 @@
 		_channels[channel].sampleLength = 0;
 	    _channels[channel].sampleOn = false;
 		_channels[channel].updateOn = false;
+		_channels[channel].keyUp = false;
 		_channels[channel].envelopeOn = false;
 		_channels[channel].envelopeTarget = 0;
 		_channels[channel].envelopeRate = 0;
@@ -352,6 +353,7 @@
 			_tracks[trackNumber].trackOn = false;
 			break;
 		case 0xF5: //Key up
+			_channels[(byte3 & 0x0F)].keyUp = true;
 			break;
 		case 0xF6: //Vibrato
 			break;
@@ -428,10 +430,10 @@
 
 	//ADVANCE PATTERN COUNT, INCREASE COUNT
 	//IF MACRO IS ON, WAIT TO ADVANCE
-	if (!_tracks[trackNumber].macroOn) {
+	if ( (!_tracks[trackNumber].macroOn) || (_tracks[trackNumber].activeMacro.keyWaitOn) ) {
 		_tracks[trackNumber].activePattern.data++;
 		_tracks[trackNumber].activePattern.patternCount++;
-		if (_tracks[trackNumber].activeMacro.noteType == 2) {
+		if (_tracks[trackNumber].activeMacro.noteType == 2 && (!_tracks[trackNumber].activeMacro.keyWaitOn) ) {
 			_tracks[trackNumber].activePattern.patternWait += _tracks[trackNumber].activeMacro.noteWait;
 		}
 	}
@@ -575,16 +577,36 @@
 		_channels[currentChannel].vibratoCount = 0;
 		break;
 	case 0x14://wait for key-up
-		//_tracks[trackNumber].activeMacro.keyWait = byte4;
-		//_tracks[trackNumber].activeMacro.keyCount++;
-		/*
-		if (!_tracks[trackNumber].activeMacro.keyUp) {
+		_tracks[trackNumber].activeMacro.keyWaitOn = true;
+		_tracks[trackNumber].activeMacro.keyWait = byte4;
+		if (_tracks[trackNumber].activeMacro.keyWait == 0) {
+			_tracks[trackNumber].activeMacro.keyWait = -1; //infinite loop
+		}
+		
+		if (_tracks[trackNumber].activeMacro.keyCount == 0) {
+			printf("KEY UP WAIT TIME:: %02x \n", _tracks[trackNumber].activeMacro.keyWait);
+			_channels[currentChannel].updateOn = true;
+			_channels[currentChannel].keyUp = false;
+		}
+
+		if ( (!_channels[currentChannel].keyUp) && (_tracks[trackNumber].activeMacro.keyCount != _tracks[trackNumber].activeMacro.keyWait) ){
+			//waiting for key up to be set
 			_tracks[trackNumber].activeMacro.data--;
 			_tracks[trackNumber].activeMacro.macroCount--;
-			_channels[currentChannel].updateOn = true;
 			_tracks[trackNumber].activeMacro.macroWait = 1;
+			printf("KEY UP WAIT COUNT:: %02x \n", _tracks[trackNumber].activeMacro.keyCount);
+			_tracks[trackNumber].activeMacro.keyCount++;
+			if (_tracks[trackNumber].activeMacro.keyCount == 0x7F) {
+				_tracks[trackNumber].activeMacro.keyCount = 1;
+			}
 		}
-		*/
+		else if ( (_channels[currentChannel].keyUp) || (_tracks[trackNumber].activeMacro.keyCount == _tracks[trackNumber].activeMacro.keyWait) ) {
+			//key up has been set or key wait time has been reached
+			_channels[currentChannel].keyUp = false;
+			_tracks[trackNumber].activeMacro.keyWaitOn = false;
+			_tracks[trackNumber].activeMacro.keyWait = 0;
+			_tracks[trackNumber].activeMacro.keyCount = 0;
+		}
 		break;
 	default:
 		break;

Modified: scummvm/branches/gsoc2008-tfmx/sound/mods/tfmx.h
===================================================================
--- scummvm/branches/gsoc2008-tfmx/sound/mods/tfmx.h	2008-08-16 04:30:01 UTC (rev 33924)
+++ scummvm/branches/gsoc2008-tfmx/sound/mods/tfmx.h	2008-08-16 04:41:26 UTC (rev 33925)
@@ -125,9 +125,9 @@
 			uint8 noteWait;  //external wait
 			int8 noteFineTune;
 			float fineTune;
-			bool keyUp;
-			uint8 keyCount;
-			uint8 keyWait;
+			bool keyWaitOn;
+			int8 keyCount;
+			int8 keyWait;
 		};
 
 		//Track structure
@@ -155,6 +155,7 @@
 			//uint32 lengthRepeat;
 			bool sampleOn;
 			bool updateOn;
+			bool keyUp;
 			//Envelope Effect
 			bool envelopeOn;
 			int8 envelopeTarget;


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list