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; }
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; }
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; }
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; }
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; }
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; }
//--------------------------------------------------------------------------- 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; }
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; }
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
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