
#include "DarkGDK.h";
//#include "STDLIB.H";
void blob_effect_setup(void);
void blob_effect_update(void);
void blob_effect_show(void);
void blob_effect_hide(void);
void freememory(void);
void selectcountry(void);
void playoptionsetup(void);
void loadprogram(char *[11]);
void deletebitmaps(void);
void credits(void);

int const blob_first = 50000;
int const blob_max = 3;
float const blob_max_size = 120.0f;
float const blob_min_size = 120.0f;
float const blob_xtarget = 0.0f;
float const blob_ytarget = 0.0f;

//float const blob_acceleration = 0.04f;
float blob_xpos[blob_max];
float blob_ypos[blob_max];
float blob_xspeed[blob_max];
float blob_yspeed[blob_max];
BOOLEAN blob_active = 0;
DWORD const SthPole =9194155; 
DWORD const SthAmerica=16646144;
DWORD const NthAmerica=16683783;
DWORD const Europe=851475;
DWORD const Africa=16776217;
DWORD const Asia=44519;
DWORD const Australia=5460628;

void DarkGDK ( void )
{ 
dbSyncOn ( );
dbSetWindowOff ();
dbSetDisplayMode (800,600,32); 
dbBackdropOn();
dbColorBackdrop (dbRGB(0,0,0));
dbAutoCamOff();
dbSyncRate(60);
dbSetCurrentBitmap(0);
blob_effect_setup();blob_effect_show();
while (dbEscapeKey()==0){
	  if (dbMouseClick()==1 && dbMouseY()>=120 && dbMouseY()<=220){
         freememory();dbSetDisplayMode(640,480,32);
         playoptionsetup();dbSync();selectcountry();
		 break;	
         //dbSetDisplayMode(800,600,32);dbSetCurrentBitmap(0);
		 //blob_effect_setup();blob_effect_show();dbSync();
	  }
      //if mousehold>=220 and mousehold <320 then gosub options
      if (dbMouseClick()==1 && dbMouseY()>=320 && dbMouseY()<420){
		//Credits
		credits();
	  }
      
		  //if mousehold>=420 and mousehold <520 then freememory():end
	  if (dbMouseClick()==1 && dbMouseY()>=420 && dbMouseY()<=520){
         break;
      }
   blob_effect_update();
   dbSync();
}
freememory();
}

void blob_effect_setup(void){
   
   dbLoadImage ("graphics/whiteblob.png",blob_first+1,1);
   dbLoadImage ("graphics/squareblob.png",blob_first+2,1);
   dbLoadAnimation ("Animations/smoke.avi",1);
   dbSetAnimationSpeed (1,25);
   dbPlayAnimationToImage (1,blob_first+3,0,0,dbAnimationWidth(1),dbAnimationHeight(1));
   dbLoopAnimation (1);
   dbLoadImage ("graphics/subtractive2.jpg",blob_first+4,1);
   int blobtexture;
   int blobcolor;
	for (int j = 1;j<blob_max;j++){
      blobcolor=1;
      blobtexture=blob_first+blobcolor;
	  switch ( j ){
	  case 1:
         dbMakeObjectPlain ((blob_first+j),1000,150);
         dbTextureObject ((blob_first+j),blob_first+2);
         dbMakeObjectPlain ((blob_first+j)+100,1000,150);
         dbTextureObject ((blob_first+j)+100,blob_first+2);
		 break; 
	  case 2:
         dbMakeObjectPlain ((blob_first+j),1000,150);
         dbTextureObject ((blob_first+j),blob_first+2);
         dbMakeObjectPlain ((blob_first+j)+100,1000,150);
         dbTextureObject ((blob_first+j)+100,blob_first+3);
		 break;
	  default:
         dbMakeObjectPlain (blob_first+3,1000,750);
         dbTextureObject (blob_first+3,blob_first+3);
         dbSetObjectTransparency (blob_first+3,1);
         //dbGhostObjectOn (blob_first+3);
         dbSetObjectAmbient (blob_first+3,0);
         dbHideObject (blob_first+3);
         dbMakeObjectPlain(blob_first+3+100,1000,750);
         dbTextureObject (blob_first+3+100,blob_first+3);
         dbSetObjectTransparency (blob_first+3+100,1);
         //dbGhostObjectOn (blob_first+3+100);
         dbSetObjectAmbient (blob_first+3+100,0);
         dbHideObject(blob_first+3+100);
		 break;
	}
      dbDisableObjectZWrite(blob_first+j);
      //dbGhostObjectOn(blob_first+j,2);
      dbSetObjectLight(blob_first+j,0);
      dbHideObject(blob_first+j);
      dbDisableObjectZWrite((blob_first+j)+100);
      //dbGhostObjectOn ((blob_first+j)+100,2);
      dbSetObjectLight ((blob_first+j)+100,0);
      dbHideObject ((blob_first+j)+100);
	}
   dbMakeObjectPlain (blob_first,102.4f,76.8f);
   dbTextureObject (blob_first,blob_first+4);
   dbDisableObjectZWrite(blob_first);
   //dbGhostObjectOn (blob_first,1);
   dbPositionObject (blob_first,0.0f,0.0f,-575.1f);
   dbSetObjectLight (blob_first,0);
   dbHideObject (blob_first);
   dbLoadSound("Sounds/fire.wav",1); 
   dbPlaySound(1);dbLoopSound(1);
}
void blob_effect_update(void){
   int j,mousehold;
   if (blob_active == 1) {
      j=1;blob_xpos[j] = 0;blob_ypos[j] = 340;
      dbPositionObject (blob_first+j,blob_xpos[j],blob_ypos[j],0.0f);
      dbPositionObject ((blob_first+j)+100,blob_xpos[j],blob_ypos[j],0.0f);
      j=2;mousehold=dbMouseY();
	  dbHideObject(blob_first+j);
	  blob_xpos[j] = 0.0f;
	  dbHideObject ((blob_first+j)+100);
	  if (mousehold>=120 && mousehold <220){ 
		  blob_ypos[j] = 340-170;dbShowObject (blob_first+j);dbShowObject ((blob_first+j)+100);}
	  if (mousehold>=220 && mousehold <320) {
		  blob_ypos[j] = 340-320;dbShowObject (blob_first+j);dbShowObject ((blob_first+j)+100);}
	  if (mousehold>=320 && mousehold <420) { 
		  blob_ypos[j] = 340-460;dbShowObject (blob_first+j);dbShowObject ((blob_first+j)+100);}
	  if (mousehold>=420 && mousehold <520) { 
		  blob_ypos[j] = 340-570;dbShowObject (blob_first+j);dbShowObject ((blob_first+j)+100);}
      dbPositionObject (blob_first+j,blob_xpos[j],blob_ypos[j],-1);
      dbPositionObject ((blob_first+j)+100,blob_xpos[j],blob_ypos[j],-1);
      j=3;blob_xpos[j] = 0.0f;blob_ypos[j] = 100.0f;
      dbPositionObject (blob_first+j,blob_xpos[j],blob_ypos[j],0.0f);
      dbPositionObject ((blob_first+j)+100,blob_xpos[j],blob_ypos[j],0.0f);
   }
}

void blob_effect_show(void){
	for (int j=1;j<blob_max;j++){
      blob_xpos[j] = dbRND(1000.0f)-400.0f;
      blob_ypos[j] = dbRND(700.0f)-200.0f;

	  blob_xspeed[j] = 0.0f;
      blob_yspeed[j] = 0.0f;
      dbPositionObject (blob_first+j,blob_xpos[j],blob_ypos[j],0.0);
      dbPositionObject ((blob_first+j)+100,blob_xpos[j],blob_ypos[j],0.0);
      dbShowObject (blob_first+j);
      dbShowObject ((blob_first+j)+100);
	}
   dbShowObject (blob_first);
   blob_active = 1;
   dbPositionCamera (0.0f,0.0f,-639.0f);
   dbPointCamera (0.0f,0.0f,0.0f);
}

void blob_effect_hide(void){
   for (int j = 3;j<blob_max;j++) {
      dbHideObject (blob_first+j);
      dbHideObject ((blob_first+j)+100);
   }
   dbHideObject (blob_first);
   blob_active = 0;
}
void freememory(void){
	if (dbSoundExist(1)){dbStopSound(1);dbDeleteSound(1);}
   for (int i=blob_first;i<blob_first+blob_max;i++){
	   if (dbObjectExist(i)){dbDeleteObject(i);}
   }
   for (int i=blob_first+100;i<blob_first+100+blob_max;i++){
	   if (dbObjectExist(i)){dbDeleteObject(i);}
   }
   for (int i=blob_first+1;i<blob_first+3;i++){
	   if (dbImageExist(i)){dbDeleteImage(i);}
   }
   if (dbAnimationExist(1)){dbDeleteAnimation(1);} 
}

void selectcountry(void){
int mouseflag=0;int MousePoint;
char* continent[11];
dbCopyBitmap(20,0);
dbSetCurrentBitmap(0);
dbSync();
while (mouseflag==0 && dbEscapeKey()==0){
   //copy bitmap 20,0
   dbSetCurrentBitmap(28);dbSync();
   MousePoint=dbPoint(dbMouseX(),dbMouseY());
   if (MousePoint==Australia) {
     dbCopyBitmap(21,0);
	 if (dbMouseClick()==1) {
         //set variables
         //tell story for aus
         *continent="Australia";mouseflag=1;
         loadprogram(continent);
	 }
   }
   if (MousePoint==Asia) {
     dbCopyBitmap(22,0);
	 if (dbMouseClick()==1){
         //set variables
         //tell story for asia
         *continent="Asia";mouseflag=1;
         loadprogram(continent);
	 }
	}
if (MousePoint==Europe) {
     dbCopyBitmap(23,0);
	 if (dbMouseClick()==1) {
         //set variables
         //tell story for Europe
         *continent="Europe";mouseflag=1;
         loadprogram(continent);
	 }
 }
if (MousePoint==Africa) {
     dbCopyBitmap(24,0);
	 if (dbMouseClick()==1) {
         //set variables
         //tell story for Africa
         *continent="Africa";mouseflag=1;
         loadprogram(continent);
	 }
   }   
   if (MousePoint==NthAmerica) {
     dbCopyBitmap(25,0);
	 if (dbMouseClick()==1) {
         //set variables
         //tell story for NthAmerica
         *continent="NthAmerica";mouseflag=1;
         loadprogram(continent);
	 }
   }
   if (MousePoint==SthAmerica) {
     dbCopyBitmap(26,0);
	 if (dbMouseClick()==1) {
         //set variables
         //tell story for SthAmerica
         *continent="SthAmerica";mouseflag=1;
         loadprogram(continent);
	 }
   }
   if (MousePoint==SthPole) {
     dbCopyBitmap(27,0);
	 if (dbMouseClick()==1) {
         //set variables
         //tell story for SthPole
         *continent="SthPole";mouseflag=1;
         loadprogram(continent);
	 }
   }
   dbSync();
}
dbSetCurrentBitmap(0);
deletebitmaps();
}

void playoptionsetup(void){
dbCreateBitmap(20,640,480);dbCreateBitmap(21,640,480);
dbCreateBitmap(22,640,480);dbCreateBitmap(23,640,480);
dbCreateBitmap(24,640,480);dbCreateBitmap(25,640,480);
dbCreateBitmap(26,640,480);dbCreateBitmap(27,640,480);
dbCreateBitmap(28,640,480);

dbLoadBitmap("Graphics/worldgreen.jpg",20);
dbCopyBitmap(20,0);dbSync();
dbLoadBitmap("Graphics/Australia.jpg",21);
dbLoadBitmap("Graphics/Asia.jpg",22);
dbLoadBitmap("Graphics/Europe.jpg",23);
dbLoadBitmap("Graphics/Africa.jpg",24);
dbLoadBitmap("Graphics/NorthAmerica.jpg",25);
dbLoadBitmap("Graphics/SouthAmerica.jpg",26);
dbLoadBitmap("Graphics/SthPole.jpg",27);
dbLoadBitmap("Graphics/mousemap.jpg",28);
}

void loadprogram(char* continent[11]) {
dbSetCurrentBitmap(0);
deletebitmaps();
dbExecuteFile("ScudLaunch.exe",*continent,"");
exit(EXIT_SUCCESS);
}
void deletebitmaps(void){
for (int i=20;i<29;i++) {
	if (dbBitmapExist(i)) {dbDeleteBitmap(i); }
}
}
void credits(void){
freememory();dbSync();
dbMakeObjectPlain(20,1000,750);
dbMakeObjectPlain(24,330,82.5f);
dbSetCurrentBitmap(0);
dbCreateBitmap(21,800,600);
dbSetCurrentBitmap(0);
dbCopyBitmap(0,21);dbSync();
dbLoadImage("Graphics/Credits.jpg",20);
dbTextureObject(20,20);dbSetObjectLight(20,0); 
dbPositionCamera(0.0f,0.0f,-639.0f);
dbPointCamera(0.0f,0.0f,0.0f);
dbLoadImage("graphics/Logos.png",22,1);
dbLoadImage("graphics/Logos.png",23,1);
dbLoadImage("graphics/darksdk.png",24,1);
dbTextureObject(24,24);
dbSetCurrentBitmap(0);
dbSprite(22,0,178,22);dbShowSprite(22); 
dbSprite(23,799,178,23);dbShowSprite(23);
dbShowObject(24);dbSetObjectAmbient(24,0); 
dbSetSpritePriority(22,0);
dbSetSpritePriority(23,0);
dbDrawSpritesLast();
dbWait(100);float x;
while (dbMouseClick()!=1){
for (int t=799;t>0;t--){
	dbSprite(22,t,178,22);
	dbSprite(23,t-799,178,23);
	dbPositionObject(24,-220,-200,-25);
	x=dbWrapValue(x+.5f);
	dbXRotateObject(24,x);
	dbSync();
	if (dbMouseClick()==1){break;}
	}
}
dbCopyBitmap(21,0);dbDeleteObject(20);dbSync();dbDeleteImage(20);
dbHideSprite(22);dbHideSprite(23);
dbDeleteObject(24);dbDeleteBitmap(21);
dbDeleteImage(22);dbDeleteImage(23);
dbDeleteImage(24);dbDeleteSprite(22);
dbDeleteSprite(23);dbDeleteImage(24);
blob_effect_setup();blob_effect_show();dbSync();
dbWait(100);
}
