Here is a speech hook system I am using for one of my projects. I thought I would share it.
It is pretty basic, but hopefully when I get my two projects finished I will write a more robust one that uses a packer to pack the audio files. I don't know if that is even possible for it to be used in AGK. But I will tackle that if or when I decided to cross that bridge.
For Tier 1 users, I don't know if that will be possible unless AppGameKit allows for the use of .dlls.
For convenience sakes, I have attached the audio files and visual studio 2008 solution.
// Includes
#include <queue>
#include "template.h"
// Namespace
using namespace AGK;
using namespace std;
app App;
std::queue<int> speechQueue;
enum test {CLOSEONE=1,KEYPLAYER,KEYPLAYER2,NICE,ONSLAUGHT,PUSHBACKOFFENSE,SLOMO,SMALLHITZONE,TERRIBLEDEFENSE,THEREISTHEDEFENSE,VERYGOODDEFENSE, PLAY_NOTHING} mytest;
unsigned int test1;
unsigned int test2;
unsigned int test3;
unsigned int test4;
unsigned int test5;
unsigned int test6;
unsigned int test7;
unsigned int test8;
unsigned int test9;
unsigned int test10;
unsigned int test11;
int _rnd=0;
char *speechText;
void PlayFromQueue();
void FlushEntireQueue();
void ClearQueue();
void app::Begin(void)
{
test1 = agk::LoadMusic("closeone.mp3");
test2 = agk::LoadMusic("keyplayer.mp3");
test3 = agk::LoadMusic("keyplayer2.mp3");
test4 = agk::LoadMusic("nice.mp3");
test5 = agk::LoadMusic("onslaught.mp3");
test6 = agk::LoadMusic("pushbackoffense.mp3");
test7 = agk::LoadMusic("slomo.mp3");
test8 = agk::LoadMusic("smallhitzone.mp3");
test9 = agk::LoadMusic("terribledefense.mp3");
test10 = agk::LoadMusic("thereisthedefense.mp3");
test11 = agk::LoadMusic("verygooddefense.mp3");
//seed generator
agk::SetRandomSeed(agk::GetMilliseconds());
}
void app::Loop (void)
{
//AGK DOESN'T LIKE THIS IN A WHILE LOOP - IT CREATES A INFINITE LOOP BY NOT BREAKING OUT OF THE PLAY QUEUE FUNCTION
//while (!speechQueue.empty())
//{
//PlayFromQueue();
//}
agk::Print("Click 8 or more times ");
agk::Print("in the window to play");
agk::Print("a speech hook. ");
agk::Print(" ");
agk::Print("Only 8 speech hooks are");
agk::Print("queued up at a time.");
agk::Print(" ");
agk::Print("If there are more than 8 hooks");
agk::Print("in the queue, the queue flushes.");
agk::Print(" ");
agk::Print(" ");
agk::Print(speechText);
//press a button to add speech to queue
if(agk::GetPointerPressed() == 1)
{
_rnd = agk::Random(1,11);
//PUSH you speech onto the queue
switch(_rnd)
{
case 1:
speechQueue.push (CLOSEONE);
speechText="Close One";
break;
case 2:
speechQueue.push (KEYPLAYER);
speechText="Watch out for the key Player";
break;
case 3:
speechQueue.push (KEYPLAYER2);
speechText="Here Comes the key Player";
break;
case 4:
speechQueue.push (NICE);
speechText="Nice";
break;
case 5:
speechQueue.push (ONSLAUGHT);
speechText="Look out for the onslaught";
break;
case 6:
speechQueue.push (PUSHBACKOFFENSE);
speechText="Way to push back the offense";
break;
case 7:
speechQueue.push (SLOMO);
speechText="Slo Mo";
break;
case 8:
speechQueue.push (SMALLHITZONE);
speechText="Small Hitzone";
break;
case 9:
speechQueue.push (VERYGOODDEFENSE);
speechText="Very Good Defense";
break;
case 10:
speechQueue.push (TERRIBLEDEFENSE);
speechText="Terrible Defense";
break;
case 11:
speechQueue.push (THEREISTHEDEFENSE);
speechText="There's the defense";
break;
}
}
if (speechQueue.empty() == false)
{
PlayFromQueue();
}
//check to see if queue is getting too big
ClearQueue();
agk::Sync();
return;
}
void app::End (void)
{
agk::DeleteMusic(test1);
agk::DeleteMusic(test2);
agk::DeleteMusic(test3);
agk::DeleteMusic(test4);
agk::DeleteMusic(test5);
agk::DeleteMusic(test6);
agk::DeleteMusic(test7);
agk::DeleteMusic(test8);
agk::DeleteMusic(test9);
agk::DeleteMusic(test10);
agk::DeleteMusic(test11);
}
void PlayFromQueue()
{
//if speech is playing exit so that speech is not interrupted
if (agk::GetMusicPlaying() == 0){}else{return;}
switch(speechQueue.front())
{
case CLOSEONE:
if (agk::GetMusicExists(test1))
{
agk::PlayMusic(test1,0,test1,test1);
speechQueue.pop();
}
break;
case KEYPLAYER:
if (agk::GetMusicExists(test2))
{
agk::PlayMusic(test2,0,test2,test2);
speechQueue.pop();
}
break;
case KEYPLAYER2:
if (agk::GetMusicExists(test3))
{
agk::PlayMusic(test3,0,test3,test3);
speechQueue.pop();
}
break;
case NICE:
if (agk::GetMusicExists(test4))
{
agk::PlayMusic(test4,0,test4,test4);
speechQueue.pop();
}
break;
case ONSLAUGHT:
if (agk::GetMusicExists(test5))
{
agk::PlayMusic(test5,0,test5,test5);
speechQueue.pop();
}
break;
case PUSHBACKOFFENSE:
if (agk::GetMusicExists(test6))
{
agk::PlayMusic(test6,0,test6,test6);
speechQueue.pop();
}
break;
case SLOMO:
if (agk::GetMusicExists(test7))
{
agk::PlayMusic(test7,0,test7,test7);
speechQueue.pop();
}
break;
case SMALLHITZONE:
if (agk::GetMusicExists(test8))
{
agk::PlayMusic(test8,0,test8,test8);
speechQueue.pop();
}
break;
case TERRIBLEDEFENSE:
if (agk::GetMusicExists(test9))
{
agk::PlayMusic(test9,0,test9,test9);
speechQueue.pop();
}
break;
case THEREISTHEDEFENSE:
if (agk::GetMusicExists(test10))
{
agk::PlayMusic(test10,0,test10,test10);
speechQueue.pop();
}
break;
case VERYGOODDEFENSE:
if (agk::GetMusicExists(test11))
{
agk::PlayMusic(test11,0,test11,test11);
speechQueue.pop();
}
break;
default:
break;
}
return;
}
void FlushEntireQueue() //flushes the entire queue
{
while (!speechQueue.empty())
{
speechQueue.pop();
}
return;
}
void ClearQueue()
{
//clear the queue if its gets to big - in this case more than eight
if (speechQueue.size() > 8)
{
while (!speechQueue.empty())
{
speechQueue.pop();
}
}
}
Joeisms
KG2Entertainment.com