Beispiel #1
0
file* file_open( char *filename ){

	file* temp = (file*)malloc( sizeof(file) );

	if( !urarlib_get(&temp->data, &temp->size, filename, ARCHIVE, PASSWORD) ){
		char buffer[256];
		FILE *fp;

#ifdef _DEBUG
		printf("file not found in archive %s\n", filename);
#endif

		sprintf(buffer,"data/%s", filename);
#ifdef _DEBUG
//		printf("trying: %s\n", buffer);
#endif


		fp = fopen(buffer, "rb");
		if(fp==NULL) return NULL;

		fseek(fp, 0, SEEK_END);
		temp->size = ftell(fp);
		rewind(fp);
		temp->data = malloc(sizeof(unsigned char)*temp->size);
		fread( temp->data, sizeof(unsigned char), temp->size, fp );
		fclose(fp);
	}

	temp->pos = 0;
	return temp;
}
Beispiel #2
0
int main(int argc, char **argv)
{
	ILuint	ImgId;
	ILenum	Error;
	char	*Data;
	long	Size;

	// We use the filename specified in the first argument of the command-line.
	if (argc < 3) {
		printf("Please specify a .rar file and file inside to open.\n");
		return 1;
	}

	// Check if the shared lib's version matches the executable's version.
	if (ilGetInteger(IL_VERSION_NUM) < IL_VERSION ||
		iluGetInteger(ILU_VERSION_NUM) < ILU_VERSION) {
		printf("DevIL version is different...exiting!\n");
		return 2;
	}

	// Initialize DevIL.
	ilInit();
	// Generate the main image name to use.
	ilGenImages(1, &ImgId);
	// Bind this image name.
	ilBindImage(ImgId);

	if (!urarlib_get(&Data, &Size, argv[2], argv[1], "none")) {
		printf("Error loading .rar file.\n");
		return 3;
	} 

	// Loads the image specified by File into the image named by ImgId.
	ilLoadL(IL_TGA, Data, Size);

	// Display the image's dimensions to the end user.
	printf("Width: %d  Height: %d  Depth: %d  Bpp: %d\n", ilGetInteger(IL_IMAGE_WIDTH),
		ilGetInteger(IL_IMAGE_HEIGHT), ilGetInteger(IL_IMAGE_DEPTH), ilGetInteger(IL_IMAGE_BYTES_PER_PIXEL));

	// Enable this to let us overwrite the destination file if it already exists.
	ilEnable(IL_FILE_OVERWRITE);

	// If argv[2] is present, we save to this filename, else we save to test.tga.
	if (argc > 2)
		ilSaveImage(argv[3]);
	else
		ilSaveImage("test.tga");

	// We're done with the image, so let's delete it.
	ilDeleteImages(1, &ImgId);

	// Simple Error detection loop that displays the Error to the user in a human-readable form.
	while ((Error = ilGetError())) {
		printf("Error: %s\n", iluErrorString(Error));
	}

	return 0;
}
Beispiel #3
0
static u8 *utilLoadRarFile(const char *file,
                           bool (*accept)(const char *),
                           u8 *data,
                           int &size)
{
  char buffer[2048];

  ArchiveList_struct *rarList = NULL;
  if(urarlib_list((void *)file, (ArchiveList_struct *)&rarList)) {
    ArchiveList_struct *p = rarList;
    
    bool found = false;
    while(p) {
      if(accept(p->item.Name)) {
        strcpy(buffer, p->item.Name);
        found = true;
        break;
      }
      p = p->next;
    }
    if(found) {
      void *memory = NULL;
      unsigned long lsize = 0;
      size = p->item.UnpSize;
      int r = urarlib_get((void *)&memory, &lsize, buffer, (void *)file, "");
      if(!r) {
        systemMessage(MSG_ERROR_READING_IMAGE,
                      N_("Error reading image %s"), buffer);
        urarlib_freelist(rarList);
        return NULL;
      }
      u8 *image = (u8 *)memory;
      if(data != NULL) {
        memcpy(image, data, size);
      }
      urarlib_freelist(rarList);
      return image;
    }
    systemMessage(MSG_NO_IMAGE_ON_ZIP,
                  N_("No image found on RAR file %s"), file);
    urarlib_freelist(rarList);
    return NULL;
  }
  // nothing found
  return NULL;
}
Beispiel #4
0
	u32 Gdl_playSong(u8*rar,u32 rarSize,const char * songPath)
	{	unsigned long size;
		char * file = 0;

		MemoryFile	datarar;
		datarar.data	= rar ;
		datarar.offset	= 0 ;
		datarar.size	= rarSize;

		if(urarlib_get(&file,&size,(char*)songPath,&datarar,0))
			return Gdl_playSong((u8*)file,size);
		#ifdef showMeError
			sprintf(dbg,"cannot uncompress %s from memory rar 0x%x",songPath,rar);
			showMsg(dbg,"error");
		#endif
		return 0;
	}
int ShellUnpacker::unpackFile()
{
	int ret = 1; //Return End
	char *data_ptr = NULL;
	unsigned long data_size = 0;  
	
	if(!_unRARList)
		return -3;

	if(urarlib_get(&data_ptr, &data_size, _unRARList->item.Name, (void*) _fileName.c_str(), NULL)) //FIXME: to finish password field
	{
		std::string newfile = Utilities::FileUtils::convertFileNameToNativeStyle(_destDirectory + "/" + std::string(_unRARList->item.Name));

		if(_unRARList->item.FileAttr == 16)
		{
			if(!Utilities::FileUtils::fileExists(newfile))
				if(!Utilities::FileUtils::makeDirectory(newfile))
					return -4; //Return writing directory error
		}
		else if(!this->writeFileToDisk(newfile, data_ptr))
		{
			if(data_ptr != NULL) 
				free(data_ptr);

			return -5; //Return Writing Error
		}
	
		ret = 0; //Return Continue
	} 
	else 
	{ 
		if(data_ptr != NULL) 
			free(data_ptr);

		return -1; //Return UnPacking Error
	}

	if(data_ptr != NULL) 
			free(data_ptr);
	
	_unRARList = (ArchiveList_struct*)_unRARList->next;
	
	return ret;
}
Beispiel #6
0
u32 Gdl_playSong(const char * songPath)
{	if(!songPath) return 0;
	u32 size;
	#ifdef useUnrarlib
		char*path = (char*)songPath;
		while(*path && *path != '.') path++;
		if(*path)
		{	if(path[1] && (path[1] == 'r' || path[1] == 'R'))
			 if(path[2] && (path[2] == 'a' || path[2] == 'A'))
			  if(path[3] && (path[3] == 'r' || path[3] == 'R')) // .rar found in path
				{	// it's an external rar, now see if we want a specific file..
					char * rpath = (char*)malloc(512);
					memcpy(rpath,songPath,(path-songPath)+4);
					
					if(path[4] == '|')
					{	// extract file path
						char * fpath = &path[5];
						char * file = 0;
						unsigned long size;
						
						//sprintf(z,"rar %s\nfile %s",rpath,fpath);
						//showMsg(z,"zzz");
						if(urarlib_get(&file,&size,fpath,rpath,0))
						{	free(rpath);
							return Gdl_playSong((u8*)file,size);
						}
						#ifdef showMeError
							char * z = rpath+256;
							sprintf(z,"cannot uncompress %s from %s",fpath,rpath);
							showMsg(z,"error");
						#endif
						free(rpath); return 0;
					}
						// not any file specified, see into the rar for a single file..

						free(rpath); return 0;
				}
		}

	#endif
	u8* song = loadFile(songPath,&size);
	if(song) return Gdl_playSong(song,size);
	 else return 0;
}
Beispiel #7
0
bool DirectGraphicsSprite::LoadImage(char *Filename, int xs, int ys, int xfs, int yfs, 
														 int xfc,  int yfc)
{
	if(GameRunning == false) 
		return false;

	bool			fromrar;
	HRESULT			hresult;
	char			*pData; 
	char			Temp[256];
	unsigned long	Size; 

	// zuerst eine evtl benutzte Textur freigeben
	SafeRelease(itsTexture);

	fromrar = false;

	// Zuerst checken, ob sich die Grafik in einem MOD-Ordner befindet
	if (CommandLineParams.RunOwnLevelList == true)
	{
		sprintf_s(Temp, "levels/%s/%s", CommandLineParams.OwnLevelList, Filename);
		if (FileExists(Temp))
			goto loadfile;
	}

	// Dann checken, ob sich das File im Standard Ordner befindet
	sprintf_s(Temp, "data/%s", Filename);
	if (FileExists(Temp))
		goto loadfile;

	// Auch nicht? Dann ist es hoffentlich im RAR file
	if (urarlib_get(&pData, &Size, Filename, RARFILENAME, convertText(RARFILEPASSWORD)) == false)
	{		
		sprintf_s(Temp, "\n-> Error loading %s from Archive !\n", Filename);
		Protokoll.WriteText(Temp, true);
		return false;
	}
	else
		fromrar = true;

loadfile:

	// normal von Platte laden?
	if (fromrar == false)
	{
		// Textur laden
		hresult = D3DXCreateTextureFromFileEx(
				  lpD3DDevice,
				  Temp,
				  NULL, NULL,				  // x und y Grösse des Sprites (aus Datei übernehmen)
				  1,                          // Nur eine Version der Textur
				  0,                          // Immer 0 setzen
				  D3DFMT_UNKNOWN,			  // Format aus der Datei lesen
				  D3DPOOL_MANAGED,            // DX bestimmt wo die Textur gespeichert wird 
				  D3DX_FILTER_NONE,			  // Keine Filter verwenden
				  D3DX_FILTER_NONE,
				  0xFFFF00FF,                 // Colorkeyfarbe (Lila)
				  NULL,						  // Keine Image Info
				  NULL,						  // Keine Palette angeben
				  &itsTexture);
	}
	else
	{
		// Textur aus Speicher erzeugen
		hresult = D3DXCreateTextureFromFileInMemoryEx(
				  lpD3DDevice,
				  (LPVOID)pData,
				  Size, 
				  NULL, NULL,				  // x und y Grösse des Sprites (aus Datei übernehmen)
				  1,                          // Nur eine Version der Textur
				  0,                          // Immer 0 setzen
				  D3DFMT_UNKNOWN,			  // Format aus der Datei lesen
				  D3DPOOL_MANAGED,            // DX bestimmt wo die Textur gespeichert wird 
				  D3DX_FILTER_NONE,			  // Keine Filter verwenden
				  D3DX_FILTER_NONE,
				  0xFFFF00FF,                 // Colorkeyfarbe (Lila)
				  NULL,						  // Keine Image Info
				  NULL,						  // Keine Palette angeben
				  &itsTexture);

		free(pData);
	}

	// Fehler beim Laden ?
	if(hresult != D3D_OK)
	{
		strcpy_s(Temp, strlen("Fehler beim Laden von ") + 1, "Fehler beim Laden von ");
		strcat_s(Temp, strlen(Filename) + 1, Filename);
		strcat_s(Temp, 4, " !\n");
		Protokoll.WriteText(Temp, true);
		return false;
	}
	
	// Grösse der Textur anpassen
	D3DSURFACE_DESC desc;
	itsTexture->GetLevelDesc(0,&desc);	

	// Grösse setzen
	itsXSize		= (float)desc.Width;
	itsYSize		= (float)desc.Height;
	itsXFrameCount	= xfc;
	itsYFrameCount	= yfc;
	itsXFrameSize	= xfs;
	itsYFrameSize	= yfs;
	itsRect.left	= 0;
	itsRect.top		= 0;
	itsRect.right	= (int)itsXSize;
	itsRect.bottom	= (int)itsYSize;

	// Ausschnitte vorberechnen
	for (int i = 0; i < xfc * yfc; i++)
	{
		itsPreCalcedRects[i].top	= (i/itsXFrameCount) * itsYFrameSize;
		itsPreCalcedRects[i].left	= (i%itsXFrameCount) * itsXFrameSize;
		itsPreCalcedRects[i].right  = itsPreCalcedRects[i].left + itsXFrameSize;
		itsPreCalcedRects[i].bottom = itsPreCalcedRects[i].top  + itsYFrameSize;
	}

	itsRect = itsPreCalcedRects[0];

	// Bild korrekt geladen
	sprintf_s(Temp, "%s %s %s %s", TextArray [TEXT_LADE_BITMAP], Filename, TextArray [TEXT_LADEN_ERFOLGREICH], "\n");
	Protokoll.WriteText(Temp, false);			

	DisplayLoadInfo(Temp);

	LoadedTextures++;							// Anzahl der geladenen Texturen erhöhen
	//_itoa_s(LoadedTextures, Temp, 10);
//	Protokoll.WriteText(Temp, false);
//	Protokoll.WriteText(" Sprite Textur(en) geladen !\n", false);
	return true;
}
Beispiel #8
0
//---------------------------------------------------------------------------
bool OGInit()
{
  MemoryFile mf;
  mf.offset=0;

  mf.data=NULL;
  HRSRC res;
  HGLOBAL hglob=NULL;
  res=FindResource(NULL,"OG_DATA",RCNUM(300));
  if (res) hglob=LoadResource(NULL,res);
  if (hglob) mf.data=(void*)LockResource(hglob);
  if (mf.data==NULL) return 0;

  mf.size=SizeofResource(Inst,res);

  char *data_ptr;
  DWORD data_size;

  if (urarlib_get(&data_ptr,&data_size,ONEGAME_NAME ".st",(char*)&mf,"")){
    OGDiskPath.SetLength(MAX_PATH);
    char temppath[MAX_PATH+1];
    GetTempPath(MAX_PATH,temppath);
    GetTempFileName(temppath,"TMP",0,OGDiskPath.Text);

    FILE *f=fopen(OGDiskPath,"wb");
    if (f==NULL) return 0;
    fwrite(data_ptr,1,data_size,f);
    fclose(f);

    SetFileAttributes(OGDiskPath,FILE_ATTRIBUTE_READONLY);

    FloppyDrive[0].SetDisk(OGDiskPath);
    OGRestoreSectors();
  }

  if (urarlib_get(&data_ptr,&data_size,"tos.img",(char*)&mf,"")==0) return 0;
  memset(Rom,0xff,256*1024);
  for (DWORD n=0;n<tos_len;n++){
    ROM_PEEK(n)=(BYTE)*(data_ptr++);
  }

  if (urarlib_get(&data_ptr,&data_size,ONEGAME_NAME ".sts",(char*)&mf,"")==0) return 0;
  if (LoadSnapShot(data_ptr,0,0,0)==0) return 0;

  if (urarlib_get(&data_ptr,&data_size,ONEGAME_NAME ".stsprites",(char*)&mf,"")){
    pOGSprites=new WORD[data_size];
    memcpy(pOGSprites,data_ptr,data_size);
  }

#if ONEGAME_IDX==OG_AW1_IDX
  if (urarlib_get(&data_ptr,&data_size,ONEGAME_NAME "_load.raw",(char*)&mf,"")){
    pOGExtraScreen[0]=(WORD*)new BYTE[data_size];
    memcpy(pOGExtraScreen[0],data_ptr,data_size);
  }
  if (urarlib_get(&data_ptr,&data_size,ONEGAME_NAME "_end.raw",(char*)&mf,"")){
    pOGExtraScreen[1]=(WORD*)new BYTE[data_size];
    memcpy(pOGExtraScreen[1],data_ptr,data_size);
  }
#endif

  if (urarlib_get(&data_ptr,&data_size,ONEGAME_NAME "_title.raw",(char*)&mf,"")==0) return 0;
  pOGTitle=(WORD*)data_ptr;

/*
  Str SnapShot=RunDir+SLASH+ONEGAME_NAME+".sts";
  if (Exists(SnapShot)==0){
    if (Exists(SnapShot+".lnk")){
      WIN32_FIND_DATA wfd;
      SnapShot=GetLinkDest(SnapShot+".lnk",&wfd);
    }else{
      SnapShot="";
    }
  }
  if (SnapShot.Empty()) return 0;
*/

  SHORTCUTINFO si[5];
  int nSI=3;

  ClearSHORTCUTINFO(&(si[0])); si[0].Id[0]=MAKEWORD(101,10), si[0].Action=CUT_PRESSKEY, si[0].PressKey=VK_MENU;
  ClearSHORTCUTINFO(&(si[1])); si[1].Id[0]=MAKEWORD(102,10), si[1].Action=CUT_PRESSKEY, si[1].PressKey=VK_LSHIFT;
  ClearSHORTCUTINFO(&(si[2])); si[2].Id[0]=VK_END,           si[2].Action=CUT_PRESSKEY, si[2].PressKey=VK_ESCAPE;

#if ONEGAME_IDX==OG_AW1_IDX || ONEGAME_IDX==OG_AW2_IDX
  // Turn off colour changing
  m68k_dpoke(0x387C,0x4e71);
  m68k_dpoke(0x387C+2,0x4e71);
  m68k_dpoke(0x387C+4,0x4e71);
  m68k_dpoke(0x387C+6,0x4e71);
#endif

#if ONEGAME_IDX==OG_NM1_IDX

  nSI++;
  ClearSHORTCUTINFO(&(si[3])); si[3].Id[0]=VK_SPACE,           si[3].Action=CUT_PRESSKEY, si[3].PressKey=VK_MENU;

  m68k_dpoke(0x21AA,0xffff); // Set up hook

  m68k_dpoke(0x233C,0x4e71); // Disable VBL colour change

  m68k_dpoke(0x2420,0x4e71);
  m68k_dpoke(0x2422,0x4e71);
  m68k_dpoke(0x2424,0x4e71);

  m68k_dpoke(0x2448,0x4e71);
  m68k_dpoke(0x244a,0x4e71);
  m68k_dpoke(0x244c,0x4e71);
  m68k_dpoke(0x244e,0x4e71);
  m68k_dpoke(0x2450,0x4e71);
  m68k_dpoke(0x2452,0x4e71);
  m68k_dpoke(0x2454,0x4e71);
  m68k_dpoke(0x2456,0x4e71);

  m68k_dpoke(0x23D0,0x4e71);
  m68k_dpoke(0x23D2,0x4e71);
  m68k_dpoke(0x23D4,0x4e71);
  m68k_dpoke(0x23D6,0x4e71);

  // Turn off top overscan
  m68k_dpoke(0x235E,0x4e71);
  m68k_dpoke(0x2360,0x4e71);
  m68k_dpoke(0x2362,0x4e71);
  m68k_dpoke(0x2364,0x4e71);

  m68k_dpoke(0x236E,0x4e71);
  m68k_dpoke(0x2370,0x4e71);
  m68k_dpoke(0x2372,0x4e71);
  m68k_dpoke(0x2374,0x4e71);

  // Turn off bottom overscan
  m68k_dpoke(0x246A,0x4e71);
  m68k_dpoke(0x246C,0x4e71);
  m68k_dpoke(0x246E,0x4e71);
  m68k_dpoke(0x2470,0x4e71);

  m68k_dpoke(0x2478,0x4e71);
  m68k_dpoke(0x247a,0x4e71);
  m68k_dpoke(0x247c,0x4e71);
  m68k_dpoke(0x247e,0x4e71);

/*
  // PROGRAM BY IGNACIO ABRIL
  // GRAPHIC DESIGNER SNATCHO
  // MUSIC COMPOSED BY MAC
  // PRODUCED BY VICTOR RUIZ
  // COPYRIGHT [^]^ DINAMIC
  char *text_replace[5]={"PROGRAMA POR IGNACIO ABRIL","GRAFICOS POR SNATCHO","COPYRIGHT FX INTERACTIVE",
                          "PRODUCIDO POR VICTOR RUIZ"," "};
  MEM_ADDRESS text_read_ad[5]={0x20be,0x20E6,0x20D2,0x20FA,0x210E};
  MEM_ADDRESS x_pos_ad[5]={0x20B6,0x20DE,0x20CA,0x20F2,0x2106};

  MEM_ADDRESS text_ad=0x3061E;
  for (int n=0;n<5;n++){
    m68k_lpoke(text_read_ad[n],text_ad);
    m68k_dpoke(x_pos_ad[n],WORD(max(157-(int)strlen(text_replace[n])*6,0)));
    text_ad=write_string_to_memory(text_ad,text_replace[n]);
  }
*/

  if (OGInfinite){
    m68k_dpoke(0x3718,0x4e71); // nop
    m68k_dpoke(0x371a,0x4e71); // nop
    m68k_dpoke(0x371c,0x4e71); // nop
  }
  if (OGNumLives){
    m68k_dpoke(0x217a,(WORD)min(OGNumLives,0x7f));
    m68k_poke(0x30706,(BYTE)min(OGNumLives,0x7f));
  }
  if (OGEasyMode){
    // 0x3167A - first mines
    m68k_dpoke(0x3167A+3*2,0x2a00);
    m68k_dpoke(0x3167A+5*2,m68k_dpeek(0x3167A+6*2));
    m68k_dpoke(0x3167A+11*2,m68k_dpeek(0x3167A+10*2));

    // 0x31694 - second mines
    m68k_dpoke(0x31694+0*2,0x9c00);
    m68k_dpoke(0x31694+1*2,0x9c00);
    m68k_dpoke(0x31694+4*2,m68k_dpeek(0x31694+5*2));
    m68k_dpoke(0x31694+9*2,m68k_dpeek(0x31694+10*2));
    m68k_dpoke(0x31694+11*2,m68k_dpeek(0x31694+12*2));

    // 0x316B4 - first enemies
    for (MEM_ADDRESS ad=0x316B5;ad<0x316dc;ad+=2){
      if (m68k_peek(ad) & 0x10) m68k_poke(ad,0);
    }

    // 0x316DE - second enemies
    for (MEM_ADDRESS ad=0x316DF;ad<0x31716;ad+=2){
      if (m68k_peek(ad) & 0x10) m68k_poke(ad,0);
    }
  }


#elif ONEGAME_IDX==OG_NM2_IDX

  ClearSHORTCUTINFO(&(si[0])); si[0].Id[0]=MAKEWORD(101,10), si[0].Action=CUT_PRESSKEY, si[0].PressKey=VK_SPACE;
/*
  Can't do this, stops space from working in console!
  ClearSHORTCUTINFO(&(si[3])); si[3].Id[0]=VK_SPACE,         si[3].Action=CUT_PRESSKEY, si[3].PressKey=VK_MENU;
  ClearSHORTCUTINFO(&(si[4])); si[4].Id[0]=VK_MENU,          si[4].Action=CUT_PRESSKEY, si[4].PressKey=VK_SPACE;
  nSI+=2;
*/

  m68k_dpoke(0x216E,0xffff); // Set title hook
  m68k_dpoke(0x2178,0xffff); // Restore palette hook
  m68k_dpoke(0x387E,0xffff); // Skip get ready

  MEM_ADDRESS ad=OG_TEXT_ADDRESS;
  ad=OGMemWrite_AndSetRef(ad,"SISTEMA CONECTADO",0x71C6,0x71DA,0);  // 0x7572=READY
  ad=OGMemWrite_AndSetRef(ad,"INTRODUCE COMANDO",0x72B2,0);  // 0x7579=INSERT MESSAGE
  ad=OGMemWrite_AndSetRef(ad,"\rORDEN DE PRIORIDAD\rALPHA REQUIRIDA\rAUTORIZACION\r",0x739E,0);  // 0x7588=\rPRIORITY ORDER ALPHA\rAUTHORISATION REQUIRED\r
  ad=OGMemWrite_AndSetRef(ad,"\rORDEN DE PRIORIDAD\rBETA REQUIRIDA\rAUTORIZACION\r",0x73FA,0);  // 0x75B6=\rPRIORITY ORDER BETA\rAUTHORISATION REQUIRED\r
  ad=OGMemWrite_AndSetRef(ad,"INTRODUCE CODIGO DEL\rPRIMER OFICIAL",0x7404,0);  // 0x75E3=INSERT 1ST OFFICIAL\rCODE
  ad=OGMemWrite_AndSetRef(ad,"INTRODUCE CODIGO DEL\rOFICIAL DE MAQUINAS",0x7414,0);  // 0x75FC=INSERT MACHINES CODE
  ad=OGMemWrite_AndSetRef(ad,"INTRODUCE CODIGO DEL\rOFICIAL DE\rCOMUNICACIONES CODE",0x741E,0);  // 0x7611=INSERT TRANSMISSIONS\rCODE
  write_string_to_memory(0x762B,"BUSCANDO\r");  // 0x762B=SEARCHING\r
  ad=OGMemWrite_AndSetRef(ad,"0010101110 DISL  OK\r\rFOUND\rOPERACION ACEPTADA\r",0x74C6,0);  // 0x7672=0010101110 DISL  OK\r\rFOUND\rOPERATION ALLOWED\r
  ad=OGMemWrite_AndSetRef(ad,"1100110101 ACOP ERROR\r\rOPERATION DENEGADA\r",0x007512,0);  // 0x76A0=1100110101 ACOP FAILED\r\rOPERATION DENIED\r
  ad=OGMemWrite_AndSetRef(ad,"0010101110 DISL ERROR\r\rOPERATION DENEGADA\r",0x0074DC,0);  // 0x76CA=0010101110 DISL FAILED\r\rOPERATION DENIED\r
  ad=OGMemWrite_AndSetRef(ad,"ACCEDIENDO A SISTEMA\01PRINCIPAL PETICION DE\01ACTION ALTO SECRETO\01COMPROBANDO\01AUTORIZACION\r",0x00723C,0);  // 0x7778=MAIN FILE OPEN\01ACTION FILE TOP SECRET\01FILE CLOSED\r
  ad=OGMemWrite_AndSetRef(ad,"SISTEMA DE CIFRADO  OK",0x007508,0x00743A,0);  // 0x76F4=LOGICAL STATUS   OK
  ad=OGMemWrite_AndSetRef(ad,"SUBMARINO EN\rSUPERFICIE\r",0x007310,0);  // 0x770C=SUBMARINE HAS EMERGED\r
  ad=OGMemWrite_AndSetRef(ad,"PUERTA ABIERTA\r",0x007356,0);  // 0x7723=DOOR OPEN\r
  write_string_to_memory(0x772E,"MOTORES PARADOS\r");  // 0x772E=MACHINES STOPED\r
  ad=OGMemWrite_AndSetRef(ad,"MISILES PREPARADOS\rPARA EL LANZAMIENTO\r",0x0071d0,0);  // 0x774a=OABERBYAMDMISSILES READY\rTO LAUNCH\r
  ad=OGMemWrite_AndSetRef(ad,"INTRODUCE CODIGO\rDEFCOM",0x0073BC,0);  // 0x7764=INSERT DEFCOM CODE\r
  ad=OGMemWrite_AndSetRef(ad,"PETICION DENEGADA\r",0x00726C,0);  // 0x77AB=SYSTEM ERROR 0 \r
  write_string_to_memory(0x77BC,"FX INTERACTIVE");  // 0x77BC=DINAMIC SOFTWARE
  ad=OGMemWrite_AndSetRef(ad,"BIENVENIDO AL U*5544\rPOR FAVOR INTRODUCE EL\r   CODIGO DE ACCESO\r",0x007130,0);  // 0x77CD=WELCOME TO THE U*5544\r  PLEASE INSERT THE\r     ACCESS CODE\r
  write_string_to_memory(0x7810,"CODIGO ERRONEO\r\rDETECTADO\rINTRUSO\r\r    ' GAME OVER '    \r\r\r\r PULSA DISPARO");  // 0x7810=THE CODE IS WRONG\r\rYOU ARE AN ILLEGAL\rPLAYER\r\r    ' GAME OVER '    \r\r\r\r PRESS FIRE
  ad=OGMemWrite_AndSetRef(ad,"MENSAJE MAL CODIFICADO\r",0x007284,0);  // 0x7864=WRONG MESSAGE\r
  write_string_to_memory(0x7873,"\r\r      NAVY MOVES\rCOPYRIGHT FX INTERACTIVE\r\r\PROGRAMA POR IGNACIO ABRIL\rGRAFICOS POR SNATCHO\r PRODUCIDO POR VICTOR RUIZ\r\r\r\r\r\r\r");

  write_string_to_memory(0x12B80,"BOMBA PREPARADA"); // THE BOMB IS SET
  write_string_to_memory(0x12B90,"INICIO CUENTA ATRAS"); // THE COUNTDOWN BEGINS
  ad=OGMemWrite_AndSetRef(ad,"INICIADA CUENTA ATRAS",0x35C6,0);  // 0x12B90=THE COUNTDOWN BEGINS
  write_string_to_memory(0x12BA5,"LA MISION HA FRACASADO"); // "YOUR MISSION HAS FAILED"
  write_string_to_memory(0x12BBD," HAS PERDIDO"); // "YOU HAVE LOST"
//  write_string_to_memory(0x12BCB,"TUS EFECTIVOS"); // "YOUR WEAPONS"
  OGMemWrite_AndSetRef(ad,"TUS EFECTIVOS",0x3812,0);  // 0x12BCB="YOUR WEAPONS"
  write_string_to_memory(0x12BD8,"LA BOMBA HA EXPLOTADO"); // "THE BOMB HAS EXPLODED"
  write_string_to_memory(0x12BEE,"  MISION  CUMPLIDA"); // "MISSION ACCOMPLISHED"
  write_string_to_memory(0x12C03,"AHORA PUEDES DISFRUTAR DEL"); // "NOW YOU CAN LIE IN THE SUN"
  write_string_to_memory(0x12C1E,"SOL Y PREPARARTE PARA"); // "AND KEEP IN SHAPE FOR"
//  write_string_to_memory(0x12C34,"ARCTIC MOVES"); // "ARCTIC MOVES"

/*
  char *text_replace[]={"GET READY",                  // GET READY
                        "PLAYER ONE",                 // PLAYER ONE
                        "FX INTERACTIVE",             // COPYRIGHT [^]^ DINAMIC
                        "PROGRAMA POR IGNACIO ABRIL", // PROGRAM BY IGNACIO ABRIL
                        "GRAFICOS POR SNATCHO",       // MUSIC COMPOSED BY MAC
                        "PRODUCIDO POR VICTOR RUIZ",  // GRAPHIC DESIGNER SNATCHO
                        "COPYRIGHT [^]^",             // PRODUCED BY VICTOR RUIZ
                        "THE BOMB IS SET",            // THE BOMB IS SET
                        "THE COUNTDOWN BEGINS",       // THE COUNTDOWN BEGINS
                        "YOUR MISSION HAS FAILED",    // YOUR MISSION HAS FAILED
                        "YOU HAVE LOST YOUR WEAPONS", // YOU HAVE LOST YOUR WEAPONS
                        "THE BOMB HAS EXPLODED",      // THE BOMB HAS EXPLODED
                        "MISSION ACCOMPLISHED",       // MISSION ACCOMPLISHED
                        "NOW YOU CAN LIE IN THE SUN", // NOW YOU CAN LIE IN THE SUN
                        "AND KEEP IN SHAPE FOR",      // AND KEEP IN SHAPE FOR
                        "ARCTIC MOVES",               // ARCTIC MOVES
                        NULL};
  MEM_ADDRESS text_draw_ad[]={0xff003856,0xff00386A,0x210A,0x211e,0x2132,0x2146,0x215a,
                              0x35A6,0x35BA,0xff0037FC,0x7EB2,0x6A90,0x6AA4,0x6AB8,0x6ACC};
  MEM_ADDRESS text_ad=0x012AF4;
  int n=0;
  do{
    if (text_draw_ad[n] & 0xff000000){ // address first
      text_draw_ad[n]&=0xffffff;
      m68k_lpoke(text_draw_ad[n]+2,text_ad);
      m68k_dpoke(text_draw_ad[n]+10,WORD(max(157-(int)strlen(text_replace[n])*6,0)));
    }else{
      m68k_lpoke(text_draw_ad[n]+12,text_ad);
      m68k_dpoke(text_draw_ad[n]+4,WORD(max(157-(int)strlen(text_replace[n])*6,0)));
    }
    text_ad=write_string_to_memory(text_ad,text_replace[n++]);
  }while (text_replace[n]!=NULL);
*/

  if (OGInfinite){
    m68k_dpoke(0x4ad6,0x4e71); // nop
    m68k_dpoke(0x4ad8,0x4e71); // nop
    m68k_dpoke(0x4ada,0x4e71); // nop
  }
  if (OGNumLives){
    BYTE tens=BYTE(min(OGNumLives/10,9)+0x30);
    BYTE ones=BYTE(min(OGNumLives % 10,9)+0x30);

    m68k_poke(0x225a,tens);
    m68k_poke(0x225b,ones);
    m68k_poke(0x12C42,tens);
    m68k_poke(0x12C43,ones);
  }


#elif ONEGAME_IDX==OG_SAT1_IDX


  m68k_dpoke(0x153E,0xffff); // Title screen draw
  m68k_dpoke(0x154a,0xffff); // Restore palette

  m68k_dpoke(0x158e,0x4e71); // Cancel drawing of keys
  m68k_dpoke(0x1590,0x4e71); // Cancel drawing of keys
  m68k_dpoke(0x163a,0x4e71); // Cancel clearing of keys
  m68k_dpoke(0x163c,0x4e71); // Cancel clearing of keys

/*
  write_string_to_memory_255(0x1658,"COPYRIGHT         SOFTWARE");  // 0x1658=COPYRIGHT         SOFTWARE
  write_string_to_memory_255(0x1673,"CODED BY");  // 0x1673=CODED BY
  write_string_to_memory_255(0x167C,"GRAPHICS");  // 0x167C=GRAPHICS
  write_string_to_memory_255(0x1685,"DANIEL");  // 0x1685=DANIEL
  write_string_to_memory_255(0x168C,"PRODUCTION");  // 0x168C=PRODUCTION
  write_string_to_memory_255(0x1697,"RODRIGUEZ");  // 0x1697=RODRIGUEZ
  write_string_to_memory_255(0x16A1,"SNATCHO");  // 0x16A1=SNATCHO
  write_string_to_memory_255(0x16A9,"KEYS");  // 0x16A9=KEYS
  write_string_to_memory_255(0x16EE,"UP##CONTROL");  //  0x16EE=UP##CONTROL
  write_string_to_memory_255(0x16FA,"DOWN##L#SHIFT");  // 0x16FA=DOWN##L#SHIFT
  write_string_to_memory_255(0x1708,"RIGHT##R#SHIFT");  // 0x1708=RIGHT##R#SHIFT
  write_string_to_memory_255(0x1717,"LEFT##%");  // 0x1717=LEFT##%
  write_string_to_memory_255(0x171F,"FIRE#SPACE");  // 0x171F=FIRE#SPACE
  write_string_to_memory_255(0x172A,"PAUSE##F1");  // 0x172A=PAUSE##F1
  write_string_to_memory_255(0x1734,"ABORT##F10");  // 0x1734=ABORT##F10
*/

  MEM_ADDRESS ad=OG_TEXT_ADDRESS;
  m68k_dpoke(0x1984,0xffff); // Set up hook
  m68k_dpoke(0x1984+2,WORD(ad-OG_TEXT_ADDRESS)); // Set address
  ad=OGMemWrite_AndSetRef(ad | nt255,"PREPARATE PARA LA BATALLA",0);  //   0x19A6=GET READY FOR THE BATTLE

  m68k_dpoke(0x1278,0xffff); // Set up hook
  m68k_dpoke(0x1278+2,WORD(ad-OG_TEXT_ADDRESS)); // Set address
  ad=OGMemWrite_AndSetRef(ad | nt255,"FIN DEL TIEMPO",0);  //  0x19C0=TIME OVER

//  write_string_to_memory_255(0x19CA,"GAME OVER");  // 0x19CA=GAME OVER

  m68k_dpoke(0x17E8,0xffff); // Set up hook
  m68k_dpoke(0x17E8+2,WORD(ad-OG_TEXT_ADDRESS)); // Set address
  ad=OGMemWrite_AndSetRef(ad | nt255," BIEN HECHO GUERRERO",0);  // 0x19D4=WELL DONE WARRIOR

  m68k_dpoke(0x1802,0xffff); // Set up hook
  m68k_dpoke(0x1802+2,WORD(ad-OG_TEXT_ADDRESS)); // Set address
  ad=OGMemWrite_AndSetRef(ad | nt255,"EL CAMINO HACIA EL REINO",0);  // 0x19E6=THE WAY TO THE MAGIC

  m68k_dpoke(0x181C,0xffff); // Set up hook
  m68k_dpoke(0x181C+2,WORD(ad-OG_TEXT_ADDRESS)); // Set address
  ad=OGMemWrite_AndSetRef(ad | nt255,"DE LA MAGIA ESTA CERCA",0);  //  0x19FC=KINGDOM IS CLOSER

  write_string_to_memory_255(0x1A0E," FELICITACIONES");  // 0x1A0E=CONGRATULATIONS

  m68k_dpoke(0x18E0,0xffff); // Set up hook
  m68k_dpoke(0x18E0+2,WORD(ad-OG_TEXT_ADDRESS)); // Set address
  OGMemWrite_AndSetRef(ad | nt255,"LO HAS CONSEGUIDO",0);  // 0x1A1E=YOU HAVE GOT IT

  write_string_to_memory_255(0x1A2E,"    YA ERES UN MAGO");  // 0x1A2E=NOW YOU ARE A MAGICIAN

  OGDrawSprite(0,0x3ba98);

  if (OGInfinite){                   
    m68k_dpoke(0x55FC,0x4e71);
    m68k_dpoke(0x55FE,0x4e71);
  }


#elif ONEGAME_IDX==OG_SAT2_IDX


  m68k_dpoke(0x11c4,0xffff); // Title screen draw
  m68k_dpoke(0x11CE,0xffff); // Restore palette

  m68k_dpoke(0x4A32,0x4e71); // Cancel drawing/clearing of keys
  m68k_dpoke(0x4A34,0x4e71); // Cancel drawing/clearing of keys
  m68k_dpoke(0x4A44,0x4e71); // Cancel drawing/clearing of keys
  m68k_dpoke(0x4A46,0x4e71); // Cancel drawing/clearing of keys

  m68k_dpoke(0xDA42,0xff); // Remove drawing of logos and copyright line in shop

/*
  write_string_to_memory_255(0x94DC,"SUPER");  // 0x94DC=SUPER
  write_string_to_memory_255(0x94E2,"EXTRA");  // 0x94E2=EXTRA
  write_string_to_memory_255(0x94E8,"POWER");  // 0x94E8=POWER
  write_string_to_memory_255(0x94F6,"MEDIUM");  // 0x94F6=MEDIUM
  write_string_to_memory_255(0x94FD,"EXTRA");  // 0x94FD=EXTRA
  write_string_to_memory_255(0x9503,"POWER");  // 0x9503=POWER
  write_string_to_memory_255(0x9512,"LIGHT");  // 0x9512=LIGHT
  write_string_to_memory_255(0x9518,"EXTRA");  // 0x9518=EXTRA
  write_string_to_memory_255(0x951E,"POWER");  // 0x951E=POWER
  write_string_to_memory_255(0x952C,"FIRE");   // 0x952C=FIRE
  write_string_to_memory_255(0x9531,"SHIELD");  // 0x9531=SHIELD
  write_string_to_memory_255(0x9540,"LIGHT");  // 0x9540=LIGHT
  write_string_to_memory_255(0x9546,"SHIELD");  // 0x9546=SHIELD
  write_string_to_memory_255(0x9556,"TELECARD");  // 0x9556=TELECARD
  write_string_to_memory_255(0x9568,"ADVANCED");  // 0x9568=ADVANCED
  write_string_to_memory_255(0x9571,"SATAN");  // 0x9571=SATAN
  write_string_to_memory_255(0x9577,"SCANNER");  // 0x9577=SCANNER
  write_string_to_memory_255(0x9588,"SATAN");  // 0x9588=SATAN
  write_string_to_memory_255(0x958E,"SCANNER");  // 0x958E=SCANNER
  write_string_to_memory_255(0x959E,"ABOUT");  // 0x959E=ABOUT
  write_string_to_memory_255(0x95A4,"SATAN");  // 0x95A4=SATAN
  write_string_to_memory_255(0x95B2,"MAGIC");  // 0x95B2=MAGIC
  write_string_to_memory_255(0x95B8,"AXE");  // 0x95B8=AXE
  write_string_to_memory_255(0x95C4,"TRIPLE");  // 0x95C4=TRIPLE
  write_string_to_memory_255(0x95CB,"MAGIC");  // 0x95CB=MAGIC
  write_string_to_memory_255(0x95D1,"AXE");  // 0x95D1=AXE
*/

  MEM_ADDRESS ad=OG_TEXT_ADDRESS;
  m68k_dpoke(0x35BE,0xffff); // Set up hook
  m68k_dpoke(0x35BE+2,WORD(ad-OG_TEXT_ADDRESS)); // Set address
  ad=OGMemWrite_AndSetRef(ad | nt255,"SALIR",0);  // 0x95DE=EXIT
//  write_string_to_memory_255(0x95DE,"SALIR");  // 0x95DE=EXIT

  write_string_to_memory_255(0x9600,"     NO PUEDES COMPRAR");  // 0x9600=     YOU CANT BUY MORE
  write_string_to_memory_255(0x9617,"    INSUFICIENTE DINERO");  // 0x9617=  YOU HAVENT ENOUGHT MONEY
  write_string_to_memory_255(0x9632,"     YA LO HAS COMPRADO");  // 0x9632=     YOU ALREADY HAVE IT
  write_string_to_memory_255(0x964B,"");  // 0x964B= AUTHORS MARCOS AND SNATCHO
  write_string_to_memory_255(0x9667,"##ENHORABUENA");  // 0x9667=CONGRATULATIONS
  write_string_to_memory_255(0x9677,"AL#FIN#EL#MUNDO");  // 0x9677=AT#LAST#THE#WORLD

  ad=OGMemWrite_AndSetRef(ad | nt255,"ESTA#LIBRE#DEL#MAL",0x157a,0);  // 0x9689=IS#FREE#FROM#EVIL
//  write_string_to_memory_255(0x9689,"ESTA#LIBRE#DEL#MAL");  // 0x9689=IS#FREE#FROM#EVIL

  ad=OGMemWrite_AndSetRef(ad | nt255,"ESC#PARA#VOLVER",0x23C6,0);  // 0x969B=ESC#TO#RETURN
//  write_string_to_memory_255(0x969B,"ESC#PARA#VOLVER");  // 0x969B=ESC#TO#RETURN
  OGMemWrite_AndSetRef(ad | nt255,"NO#QUEDA#TIEMPO",0x14FA,0);  // 0x96A9=TIME#OVER
//  write_string_to_memory_255(0x96A9,"NO#QUEDA#TIEMPO");  // 0x96A9=TIME#OVER

//  write_string_to_memory_255(0x96B3,"GAME##OVER");  // 0x96B3=GAME##OVER

  OGDrawSprite(0,0x5F240);  
  OGDrawSprite(1,0x5f3f0);
  OGDrawSprite(2,0x5c390);
  OGDrawSprite(3,0x5bc50);
  OGDrawSprite(4,0x5c750);

/*
  write_string_to_memory_255(0x96BE,"COPYRIGHT##########SOFTWARE");  // 0x96BE=COPYRIGHT##########SOFTWARE
  write_string_to_memory_255(0x96DA,"CODED#BY");  // 0x96DA=CODED#BY
  write_string_to_memory_255(0x96E3,"GRAPHICS");  // 0x96E3=GRAPHICS
  write_string_to_memory_255(0x96EC,"MARCOS");  // 0x96EC=MARCOS
  write_string_to_memory_255(0x96F3,"PRODUCTION");  // 0x96F3=PRODUCTION
  write_string_to_memory_255(0x96FE,"JOURON");  // 0x96FE=JOURON
  write_string_to_memory_255(0x9705,"SNATCHO");  // 0x9705=SNATCHO
  write_string_to_memory_255(0x970D,"KEYS");  // 0x970D=KEYS
  write_string_to_memory_255(0x9712,"$$$$$$$$$$$$$");  // 0x9712=$$$$$$$$$$$$$
  write_string_to_memory_255(0x975C,"UP$$CONTROL");  // 0x975C=UP$$CONTROL
  write_string_to_memory_255(0x9768,"DOWN$$L$SHIFT");  // 0x9768=DOWN$$L$SHIFT
  write_string_to_memory_255(0x9776,"RIGHT$$R$SHIFT");  // 0x9776=RIGHT$$R$SHIFT
  write_string_to_memory_255(0x9785,"LEFT$$%");  // 0x9785=LEFT$$%
  write_string_to_memory_255(0x978D,"FIRE$$SPACE");  // 0x978D=FIRE$$SPACE
  write_string_to_memory_255(0x9799,"UP$DOWN$$ALT");  // 0x9799=UP$DOWN$$ALT
  write_string_to_memory_255(0x97A6,"TELEPORT$$T");  // 0x97A6=TELEPORT$$T
  write_string_to_memory_255(0x97B2,"PAUSE$$H");  // 0x97B2=PAUSE$$H
  write_string_to_memory_255(0x97BB,"ABORT$$UNDO");  // 0x97BB=ABORT$$UNDO
*/


#elif ONEGAME_IDX==OG_AW1_IDX

  m68k_dpoke(0xa0aa,0xffff); // Title screen
  m68k_dpoke(0xA0B0,0xffff); // Restore palette

  m68k_dpoke(0x8986,0xffff); // Load screen
  m68k_dpoke(0x8988,0xffff); // Load screen

  m68k_dpoke(0x8CEC,0xffff); // End screen
  m68k_dpoke(0x8CEE,0xffff); // End screen

  m68k_dpoke(0x9FFA,0x4e71); // Disable scrollers
  m68k_dpoke(0x9FFA+2,0x4e71); // Disable scrollers
  m68k_dpoke(0x9FFA+4,0x4e71); // Disable scrollers
  m68k_dpoke(0x9FFA+6,0x4e71); // Disable scrollers

  m68k_dpoke(0xa01a,0x4e71); // Disable Dinamic logo
  m68k_dpoke(0xa01a+2,0x4e71); // Disable Dinamic logo
  m68k_dpoke(0xa01a+4,0x4e71); // Disable Dinamic logo
  m68k_dpoke(0xa028,0x4e71); // Disable Dinamic logo
  m68k_dpoke(0xa028+2,0x4e71); // Disable Dinamic logo
  m68k_dpoke(0xa028+4,0x4e71); // Disable Dinamic logo

  m68k_dpoke(0x8996,0xffff); // Fade out before load hook
  m68k_dpoke(0x8998,0xffff); // "Do what above instruction should" hook

  m68k_dpoke(0x899e,0x4e71); // Disable normal fade out
  m68k_dpoke(0x899e+2,0x4e71); // Disable normal fade out
  m68k_dpoke(0x899e+4,0x4e71); // Disable normal fade out

/*
  0xa578="1. KEYBOARD"
  0xa584="2. KEYS AND JOYSTICK"
  0xa599="PRESS FIRE TO START"
  0xa5ad="INSERT DISK 2"
  0xa5bb="ACCESS CODE"
  0xa5c7="101069"
  0x20b86="AFTER THE WAR   COPYRIGHT DINAMIC SOFTWARE 1989   "
          "PROGRAM BY DANIEL RODRIGUEZ    MUSIC BY MAC   SOUND FX BY VICTOR RUIZ   "
          "ADDITIONAL SOUNDS, MAPS AND GRAPHICS BY JAVIER CUBEDO   "
          "ARTISTIC DESIGN BY RICARDO MACHUCA   GRAPHICS, DESIGN AND PRODUCTION BY SNATCHO      "
  0x20cd7="      KEYS AND JOYSTICK   ALT-KICK   SPACE-PUNCH   F1-PAUSE   F10-ABORT      "
  0x20d4e="      KEYBOARD   CTRL-JUMP   SHIFT-DUCK DOWN   /-LEFT   SHIFT-RIGHT   SPACE-PUNCH   ALT-KICK   F1-PAUSE   F10-ABORT      "
*/
//  OG_AW_WriteString(0x18796+00 | NONULL,"WAR.......");
  OG_AW_WriteString(0x18796+14 | NONULL,"..........");
  OG_AW_WriteString(0x18796+28 | NONULL,"..........");

/*
  OG_AW_WriteString(0xa578,"1. KEYBOARD");
  OG_AW_WriteString(0xa584,"2. KEYS AND JOYSTICK");
  OG_AW_WriteString(0xa599,"PRESS FIRE TO START");
  OG_AW_WriteString(0xa5ad,"INSERT DISK 2");
  OG_AW_WriteString(0xa5bb,"ACCESS CODE");
//  OG_AW_WriteString(0xa5c7,"101069");
  OG_AW_WriteString(0x20cd7,"      KEYS AND JOYSTICK   ALT-KICK   SPACE-PUNCH   "
                        "F1-PAUSE   F10-ABORT      ");
  OG_AW_WriteString(0x20d4e,"      KEYBOARD  CTRL-JUMP   SHIFT-DUCK DOWN   /-LEFT   "
                        "SHIFT-RIGHT   SPACE-PUNCH   ALT-KICK   F1-PAUSE   F10-ABORT      ");
*/
  OG_AW_WriteString(0x20b86,"             ");

  OGDrawSprite(0,0x1c506);
  OGDrawSprite(1,0x1cde6);
  OGDrawSprite(2,0x1d106);
  OGDrawSprite(3,0x1d286);
  OGDrawSprite(4,0x1c6de);
  OGDrawSprite(5,0x1bfe6);
  OGDrawSprite(6,0x1d346);
  OGDrawSprite(7,0x1d446);

  if (OGNumLives){
    m68k_dpoke(0x8E94+2,(WORD)min(OGNumLives+1,4));
  }
  if (OGInfinite){
    m68k_dpoke(0x0150FA,0x4e71);
    m68k_dpoke(0x0150FA+2,0x4e71);
  }

#elif ONEGAME_IDX==OG_AW2_IDX

  m68k_dpoke(0xCFDC,0xffff); // Title screen
  m68k_dpoke(0xCFE0,0xffff); // Restore palette

  m68k_dpoke(0xcf38,0x4e71); // Disable scroller
  m68k_dpoke(0xcf38+2,0x4e71); // Disable scroller
  m68k_dpoke(0xcf3c,0x4e71); // Disable scroller
  m68k_dpoke(0xcf3c+2,0x4e71); // Disable scroller

  m68k_dpoke(0xcf54,0x4e71); // Disable Dinamic logo
  m68k_dpoke(0xcf54+2,0x4e71); // Disable Dinamic logo
  m68k_dpoke(0xCF60,0x4e71); // Disable Dinamic logo
  m68k_dpoke(0xCF60+2,0x4e71); // Disable Dinamic logo

/*
  0x97d6="AFTER THE WAR    COPYRIGHT DINAMIC SOFTWARE 1989   PROGRAM BY JOSE LOPEZ   "
         "MUSIC BY MAC   SOUND FX BY VICTOR RUIZ   "
         "ADDITIONAL SOUNDS, MAPS AND GRAPHICS BY JAVIER CUBEDO   "
         "ARTISTIC DESIGN BY RICARDO MACHUCA   GRAPHICS, DESIGN AND PRODUCTION BY SNATCHO      "
  0x9920="      KEYBOARD    CTRL-RAISE GUN    SHIFT-LOWER GUN    /-LEFT    SHIFT-RIGHT    "
         "RETURN-CHANGE FLOOR    SPACE-SHOOT    ALT-DUCK DOWN    F1-PAUSE    F10-ABORT      "
  0x99e2="      JOYSTICK   SPACE-SHOOT   ALT-DUCK DOWN   F1-PAUSE   F10-ABORT      "
  0x9a54="      KEYS AND JOYSTICK   CTRL OR SHIFT-CHANGE FLOOR   SPACE-SHOOT   "
         "ALT-DUCK DOWN   F1-PAUSE   F10-ABORT      "
  0x9aec="  THIS IS AFTER THE WAR.IF YOU HAVE      ENJOYED IT GET READY FOR A.M.C.    "
         "ASTRO-MARINE CORPS BY DINAMIC      SOON ON YOUR SCREEN      "
  0x9b8d="1. KEYBOARD"
  0x9b99="2. JOYSTICK"
  0x9ba5="3. KEYS AND JOYSTICK"
  0x9bba="PRESS FIRE TO START"
  0x9bce="INPUT ACCESS CODE"
*/
//  OG_AW_WriteString(0x14f2e | NONULL,"WAR.......");
  OG_AW_WriteString(0x14f3c | NONULL,"..........");
  OG_AW_WriteString(0x14f4a | NONULL,"..........");
  OG_AW_WriteString(0x97d6,"    "); // This never appears, but changing it will make the hiscores appear quicker
/*
  OG_AW_WriteString(0x9920,"      KEYBOARD    CTRL-RAISE GUN    SHIFT-LOWER GUN    /-LEFT    SHIFT-RIGHT    "
         "RETURN-CHANGE FLOOR    SPACE-SHOOT    ALT-DUCK DOWN    F1-PAUSE    F10-ABORT      ");
  OG_AW_WriteString(0x99e2,"      JOYSTICK  SPACE-SHOOT   ALT-DUCK DOWN   F1-PAUSE   F10-ABORT      ");
  OG_AW_WriteString(0x9a54,"      KEYS AND JOYSTICK   CTRL OR SHIFT-CHANGE FLOOR   SPACE-SHOOT   "
         "ALT-DUCK DOWN   F1-PAUSE   F10-ABORT      ");
  OG_AW_WriteString(0x9b8d,"1. KEYBOARD");
  OG_AW_WriteString(0x9b99,"2. JOYSTICK");
  OG_AW_WriteString(0x9ba5,"3. KEYS AND JOYSTICK");
  OG_AW_WriteString(0x9bba,"PRESS FIRE TO START");
  OG_AW_WriteString(0x9bce,"INPUT ACCESS CODE");
                            0123456789012345678901234567890123456789*/
  OG_AW_WriteString(0x9aec,"       ESTO HA SIDO AFTER THE WAR       "
                           "     SI HAS DISFRUTADO, PREPARATE PARA  "
                           "             ASTRO-MARINE CORPS         "
                           "             PRONTO EN TU PC            ");

  OGDrawSprite(0,0x41D8E);
  OGDrawSprite(1,0x444ce);
  OGDrawSprite(2,0x40F1E);
  OGDrawSprite(3,0x44c1e);
  OGDrawSprite(4,0x41526);
  OGDrawSprite(5,0x4463e);
  OGDrawSprite(6,0x41fee+32);
  OGDrawSprite(7,0x4478e);
  OGDrawSprite(8,0x44a8e);
  OGDrawSprite(9,0x44d26);

  m68k_dpoke(0x01198E,0xffff); // rts from load routine (need to draw sprites 10-13 here)

  if (OGNumLives){
    m68k_poke(0x11898+3,(BYTE)min(OGNumLives,3));
  }
  if (OGInfinite){
    m68k_dpoke(0xE48C,0x4e71);
    m68k_dpoke(0xE48C+2,0x4e71);
  }

#endif
  SET_PC(PC32); // Might start at altered address, reset prefetch

  CurrentCuts.DeleteAll();
  for (int n=0;n<nSI;n++) CurrentCuts.Add(si[n]);
  ShortcutBox.CurrentCutSelType=2;

  return true;
}
Beispiel #9
0
bool DirectGraphicsFont::LoadFont(const char *Filename, int xts, int yts,
								  int xCharsize, int yCharsize, int xChars,int yChars)
{
	mTexture = new (DirectGraphicsSprite);
	if (!mTexture->LoadImage(Filename, xts, yts, xCharsize, yCharsize, xChars, 0))
		return false;

	// Grösse setzen
	//
	mXCharSize		= xCharsize;
	mYCharSize		= yCharsize;
	mXChars			= xChars;
	mXTextureSize	= xts;
	mYTextureSize	= yts;

	// Länge der einzelnen Zeichen aus der Grafik bestimmen
	//

	// Geladene Font Textur locken
	//
#if defined(PLATFORM_DIRECTX)
	D3DSURFACE_DESC d3dsd;
	D3DLOCKED_RECT  d3dlr;

	HRESULT hresult;

	mTexture->itsTexture->GetLevelDesc(0, &d3dsd);
	hresult = mTexture->itsTexture->LockRect    (0, &d3dlr, 0, 0 );

	// Fehler beim Locken ?
	if (hresult != D3D_OK)
		Protokoll.WriteText("error locking font texture!", true);

	// Colorkey feststellen
	DWORD key = ((DWORD*)d3dlr.pBits)[0];
#elif defined(PLATFORM_SDL)
	image_t image;
	char Temp[256];
	char *pData;
	unsigned long Size;

	if (CommandLineParams.RunOwnLevelList == true)
	{
	    sprintf_s(Temp, "levels/%s/%s", CommandLineParams.OwnLevelList, Filename);
		if (FileExists(Temp))
		{
			loadImage(image, Temp);
		}
	}

	if (image.data == NULL)
	{
	    sprintf_s(Temp, "data/%s", Filename);
		if (FileExists(Temp))
		{
			loadImage(image, Temp);
		}
	}

	if (image.data == NULL)
	{
		if (urarlib_get(&pData, &Size, Filename, RARFILENAME, convertText(RARFILEPASSWORD)) != false)
	    {
			loadImage(image, pData, Size);
			free(pData);
		}
	}

	if (image.data  == NULL)
	{
		return true;
	}

#if 1
    /* menufont.png: pixel at (0,0) (upper left corner) is part of a char/glyph,
       so pick key from lower left corner. Maybe in DirectX image is flipped
       vertically? */

    DWORD key = (((DWORD*)image.data )[image.w * (image.h - 1)]);
#else
    DWORD key = ((DWORD*)image.data )[0];
#endif

/* // PICKLE Not OpenGLES compat, left for info
    int textureWidth, textureHeight;
    glBindTexture( GL_TEXTURE_2D, mTexture->itsTexture );
    glGetTexLevelParameteriv( GL_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &textureWidth );
    glGetTexLevelParameteriv( GL_TEXTURE_2D, 0, GL_TEXTURE_HEIGHT, &textureHeight );

    GLubyte *buffer = (GLubyte *)malloc(textureWidth*textureHeight*4);
    glGetTexImage( GL_TEXTURE_2D, 0, GL_RGBA, GL_UNSIGNED_BYTE, buffer );
    DWORD key = ((DWORD*)buffer)[0];

    glBindTexture( GL_TEXTURE_2D, 0 );
*/
#endif
	//key = 0;

	// Einzelne Zeichen durchgehen
	for (int i=0; i < xChars; i++)
	 for (int j=0; j < yChars; j++)
	 {
		int		last  = 0;
		bool	found = false;

		for (int k = 0; k<xCharsize; k++)
		{
			found = false;

			for (int l = 0; l<yCharsize; l++)
			{
#if defined(PLATFORM_DIRECTX)
				if (((DWORD*)d3dlr.pBits)[(j * yCharsize + l) * d3dsd.Width + (i*xCharsize + k)] != key)
					found = true;
#elif defined(PLATFORM_SDL)
				if (((DWORD*)image.data)[(j * yCharsize + l) * image.w + (i*xCharsize + k)] != key)
					found = true;
/*
				if (((DWORD*)buffer)[(j * yCharsize + l) * textureWidth + (i*xCharsize + k)] != key)
					found = true;
*/
#endif
			}

			if (found == true)
				last = k;
		}

		mCharLength[j * xChars + i] = last+1;
	 }

#if defined(PLATFORM_DIRECTX)
	// Unlocken
	mTexture->itsTexture->UnlockRect(0);
#elif defined(PLATFORM_SDL)
    delete [] image.data;
#endif

	return false;
}
Beispiel #10
0
bool CSoundManager::LoadWave(char *Filename, int Nr, bool looped)
{
	if (false == InitSuccessfull)
		return false;

	if(GameRunning == false) 
		return false;

	bool			fromrar;	
	char			*pData; 
	char			Temp[256];
	unsigned long	Size; 
	char Buffer[100];	

	fromrar = false;

	int Nummer = Nr;
	if (its_Sounds[Nummer] != NULL)
	{
		delete(its_Sounds[Nummer]);
		its_Sounds[Nummer] = NULL;
	}

	// Zuerst checken, ob sich der Sound in einem MOD-Ordner befindet
	if (CommandLineParams.RunOwnLevelList == true)
	{
		sprintf_s(Temp, "levels/%s/%s", CommandLineParams.OwnLevelList, Filename);
		if (FileExists(Temp))
			goto loadfile;
	}

	// Dann checken, ob sich das File im Standard Ordner befindet
	sprintf_s(Temp, "data/%s", Filename);
	if (FileExists(Temp))
		goto loadfile;

	// Auch nicht? Dann ist es hoffentlich im RAR file
	if (urarlib_get(&pData, &Size, Filename, RARFILENAME, convertText(RARFILEPASSWORD)) == false)
	{		
		sprintf_s(Temp, "\n-> Error loading %s from Archive !\n", Filename);
		Protokoll.WriteText(Temp, true);
		return false;
	}
	else
		fromrar = true;

loadfile:	

	its_Sounds[Nummer] = new CWave();

	// von Platte laden
	if (fromrar == false)
	{
		if (looped == false)
			its_Sounds[Nummer]->SoundData = FSOUND_Sample_Load(Nr, Temp, FSOUND_LOOP_OFF, 0, Size);
		else // mit Loop laden
			its_Sounds[Nummer]->SoundData = FSOUND_Sample_Load(Nr, Temp, FSOUND_LOOP_NORMAL, 0, Size);
	}
	// aus Rarfile laden
	else
	{
		if (looped == false)
			its_Sounds[Nummer]->SoundData = FSOUND_Sample_Load(Nr, pData, FSOUND_LOADMEMORY | FSOUND_LOOP_OFF, 0, Size);
		else // mit Loop laden
			its_Sounds[Nummer]->SoundData = FSOUND_Sample_Load(Nr, pData, FSOUND_LOADMEMORY | FSOUND_LOOP_NORMAL, 0, Size);

		free(pData);
	}

	// Temp Datei wieder löschen und Speicher freigeben
	//DeleteFile("temp.dat");
	//free(pData);

	// Und bei bedarf den loop ausschalten
	//if (looped == false)
	//	FSOUND_Sample_SetLoopMode(its_Sounds[Nummer]->SoundData, FSOUND_LOOP_OFF);

	// Fehler beim Laden ?
	//
	if (its_Sounds[Nummer]->SoundData == NULL)
	{
		// TODO FIX
/*
		strcpy_s(Buffer, "\n-> Error loading ");
		strcat_s(Buffer, Filename);
		strcat_s(Buffer, "\n");
		Protokoll.WriteText(Buffer, true);
*/

	//	return (-1);
		return false;
	}

	its_Sounds[Nummer]->isLooped = looped;

	its_LoadedSounds++;

	//its_Sounds[Nummer].Name = Filename;

	// kurz anspielen und wieder stoppen
	int Channel = FSOUND_PlaySound   (FSOUND_FREE, its_Sounds[Nr]->SoundData);
	FSOUND_SetVolume(Channel, 0);
	FSOUND_StopSound(Channel);

	// TODO FIX
/*
		strcpy_s(Buffer, TextArray [TEXT_LADE_WAVE]);
		strcat_s(Buffer, Filename);
		strcat_s(Buffer, TextArray [TEXT_LADEN_ERFOLGREICH]);
		strcat_s(Buffer, " \n");
		Protokoll.WriteText(Buffer, false);*/
	

	DisplayLoadInfo(Buffer);

	//return Nummer;
	return true;
} // LoadWave
Beispiel #11
0
bool CSoundManager::LoadSong(char *Filename, int Nr)
{
	if (false == InitSuccessfull)
		return false;

	bool			fromrar;	
	char			*pData; 
	char			Temp[256];
	unsigned long	Size; 
	char Buffer[100];	

	fromrar = false;

	// Zuerst checken, ob sich der Song in einem MOD-Ordner befindet
	if (CommandLineParams.RunOwnLevelList == true)
	{
		sprintf_s(Temp, "levels/%s/%s", CommandLineParams.OwnLevelList, Filename);
		if (FileExists(Temp))
			goto loadfile;
	}

	// Dann checken, ob sich das File im Standard Ordner befindet
	sprintf_s(Temp, "data/%s", Filename);
	if (FileExists(Temp))
		goto loadfile;

	// Auch nicht? Dann ist es hoffentlich im RAR file
	if (urarlib_get(&pData, &Size, Filename, RARFILENAME, convertText(RARFILEPASSWORD)) == false)
	{		
		sprintf_s(Temp, "\n-> Error loading %s from Archive !\n", Filename);
		Protokoll.WriteText(Temp, true);
		return false;
	}
	else
		fromrar = true;

loadfile:

	int Nummer = Nr;
	if (its_Songs[Nummer] != NULL)
	{
		delete(its_Songs[Nummer]);
		its_Songs[Nummer] = NULL;
	}
		
	its_Songs[Nummer] = new CSong();

	if (fromrar == false)
		its_Songs[Nummer]->SongData = FMUSIC_LoadSong(Temp);
	else
	{
		its_Songs[Nummer]->SongData = FMUSIC_LoadSongEx(pData, 0, Size, FSOUND_LOADMEMORY, NULL, 0);
		free(pData);
	}

	// Fehler beim Laden ?
	//
	if (its_Songs[Nummer]->SongData == NULL)
	{
		strcpy_s(Buffer, strlen("\n-> Error loading ") + 1, "\n-> Error loading ");
		strcat_s(Buffer, strlen(Filename) + 1, Filename);
		strcat_s(Buffer, 3, "\n");
		Protokoll.WriteText(Buffer, true);

		//return (-1);
		return false;
	}

	its_LoadedSongs++;

	//its_Songs[Nummer].Name = Filename;
	its_Songs[Nummer]->Volume = 100;
	its_Songs[Nummer]->FadingVolume = 0.0f;

	// TODO FIX
	/*
	strcpy_s(Buffer, "Load Song : ");
	strcat_s(Buffer, Filename);
	strcat_s(Buffer, " successfull\n");
	Protokoll.WriteText(Buffer, false);
	*/

	//return Nummer;
	return true;
} // LoadSong