[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