//------------------------------------------------------------------------- // ShowChecksums() //------------------------------------------------------------------------- void ShowChecksums() { #if GAME_VERSION == SHAREWARE_VERSION char mapname[23]="SWMAPS\\MAPTEMP."; #elif GAME_VERSION == MISSIONS_1_THR_3 char mapname[23]="1_3MAPS\\MAPTEMP."; #else char mapname[13]="MAPTEMP."; #endif char gfxname[13]="VGAGRAPH."; char audioname[13]="AUDIOT."; char dizname[]="FILE_ID.DIZ"; strcat(gfxname,extension); strcat(mapname,extension); strcat(audioname,extension); printf("\n"); printf("%s: %lx\n",audioname,ChecksumFile(audioname,0)); printf("%s: %lx\n",mapname,ChecksumFile(mapname,0)); printf("%s: %lx\n",gfxname,ChecksumFile(gfxname,0)); printf("%s: %lx\n",dizname,ChecksumFile(dizname,0)); printf("\n"); }
int main( int argc, char* argv[] ) { if( argc > 1 ) { bool SuppressedOutput = false; uint8* FileContents = NULL; int Length = 0; if( argc > 2 ) { if( SimpleString( "-s" ) == argv[2] ) { SuppressedOutput = true; } } { FileStream ChecksumFile( argv[1], FileStream::EFM_Read ); Length = ChecksumFile.Size(); FileContents = new uint8[ Length ]; ChecksumFile.Read( Length, FileContents ); } if( FileContents && Length ) { uint32 FileChecksum = Checksum::Adler32( FileContents, Length ); delete FileContents; if( SuppressedOutput ) { PRINTF( "%s\n", argv[1] ); PRINTF( "%d\n", Length ); PRINTF( "0x%08X\n", FileChecksum ); } else { PRINTF( "Filename: %s\n", argv[1] ); PRINTF( "Length: %d\n", Length ); PRINTF( "Checksum: 0x%08X\n", FileChecksum ); } } } return 0; }
//------------------------------------------------------------------------- // CheckValidity() //------------------------------------------------------------------------- void CheckValidity(char *file, Sint32 valid_checksum) { char filename[13]; Sint32 checksum; if (strlen(file) > 9) MAIN_ERROR(CHECK_FILENAME_TOO_LONG); strcpy(filename,file); strcat(filename,extension); checksum=ChecksumFile(filename,0); if (checksum != valid_checksum) #if GAME_VERSION != SHAREWARE_VERSION if (strstr(file,"MAP")) InvalidLevels(); #else BadChecksum(); #endif }
main(int argc, char *argv[]) { int Handle; unsigned char Byte; unsigned int Checksum; int ReadLength; if ( argc != 2 ) { printf("usage: checksum filename\n"); exit(1); } if ( (Handle = open(argv[1], O_RDONLY | O_BINARY)) == -1 ) { printf("Can't open file: %s\n", argv[1]); exit(1); } if ( !ChecksumFile(Handle, &Checksum) ) { printf("Error reading file %s\n", argv[1]); exit(1); } /* Report the result */ printf("The checksum is: %u\n", Checksum); exit(0); }
//------------------------------------------------------------------------ // PreDemo() //------------------------------------------------------------------------ void PreDemo() { #if !SKIP_TITLE_AND_CREDITS #if TECH_SUPPORT_VERSION fontnumber=4; SETFONTCOLOR(0,15*3); CenterWindow (26,7); US_Print(EnterBetaCode); VW_UpdateScreen(); CA_LoadAllSounds(); PM_CheckMainMem(); SD_PlaySound(INFORMDEATH2SND); // Nooooo! IN_UserInput(TickBase*20); ClearMemory(); #elif BETA_TEST boolean param=false; for (i=1; i<g_argc; i++) switch (US_CheckParm(g_argv[i],MainStrs)) { case 13: param=true; break; } if (!param) { char buffer[15] = {0}; fontnumber=4; CenterWindow (26,7); US_Print(EnterBetaCode); VW_UpdateScreen(); SETFONTCOLOR(0,15*3); US_LineInput(24*8,92,buffer,buffer,true,14,100); if (_fstricmp(buffer,bc_buffer)) Quit("Bad beta code!"); } #endif #if GAME_VERSION == SHAREWARE_VERSION #if IN_DEVELOPMENT || GEORGE_CHEAT if (!MS_CheckParm("nochex")) #endif { #if (!SKIP_CHECKSUMS) // CheckValidity("MAPTEMP.",MAPTEMP_CHECKSUM,"LEVELS"); CheckValidity("MAPTEMP.",MAPTEMP_CHECKSUM); #endif } #else #if (!SKIP_CHECKSUMS) if (ChecksumFile("FILE_ID.DIZ",0) != DIZFILE_CHECKSUM) gamestate.flags |= GS_BAD_DIZ_FILE; #endif #endif VL_SetPaletteIntensity(0,255,vgapal,0); if (!(gamestate.flags & GS_NOWAIT)) { #if (0) // GAME_VERSION != SHAREWARE_VERSION //--------------------- // Anti-piracy screen //--------------------- // Cache pic // CA_CacheScreen(PIRACYPIC); // Cache and set palette. AND Fade it in! // CA_CacheGrChunk(PIRACYPALETTE); VL_SetPalette (0,256,grsegs[PIRACYPALETTE]); VL_SetPaletteIntensity(0,255,grsegs[PIRACYPALETTE],0); VW_UpdateScreen(); VL_FadeOut (0, 255, 0, 0, 25, 20); VL_FadeIn(0,255,grsegs[PIRACYPALETTE],30); // Wait a little // IN_UserInput(TickBase*20); // Free palette // UNCACHEGRCHUNK(PIRACYPALETTE); VL_FadeOut (0, 255, 0, 0, 25, 20); VW_FadeOut(); // Cleanup screen for upcoming SetPalette call // { Uint16 old_bufferofs=bufferofs; bufferofs=displayofs; VL_Bar(0,0,320,200,0); bufferofs=old_bufferofs; } #endif //--------------------- // Apogee presents //--------------------- // ISG --> this fixes intro timing IN_UserInput(TickBase*1); // Cache pic // CA_CacheScreen(APOGEEPIC); // Load and start music // CA_CacheAudioChunk(STARTMUSIC+APOGFNFM_MUS); ::SD_StartMusic(APOGFNFM_MUS); // Cache and set palette. AND Fade it in! // CA_CacheGrChunk(APOGEEPALETTE); VL_SetPalette (0,256,static_cast<const Uint8*>(grsegs[APOGEEPALETTE])); VL_SetPaletteIntensity(0,255,static_cast<const Uint8*>(grsegs[APOGEEPALETTE]),0); VW_UpdateScreen(); VL_FadeOut (0, 255, 25, 29, 53, 20); VL_FadeIn(0,255,static_cast<const Uint8*>(grsegs[APOGEEPALETTE]),30); // Wait for end of fanfare // if (MusicMode==smm_AdLib) { IN_StartAck(); while ((!sqPlayedOnce) && (!IN_CheckAck())); } else IN_UserInput(TickBase*6); SD_MusicOff(); // Free palette and music. AND Restore palette // UNCACHEGRCHUNK(APOGEEPALETTE); delete [] audiosegs[STARTMUSIC + APOGFNFM_MUS]; audiosegs[STARTMUSIC + APOGFNFM_MUS] = NULL; // Do A Blue Flash! VL_FadeOut (0, 255, 25, 29, 53, 20); VL_FadeOut (0, 255, 0, 0, 0, 30); //--------------------- // JAM logo intro //--------------------- // Load and start music // CA_CacheAudioChunk(STARTMUSIC+TITLE_LOOP_MUSIC); ::SD_StartMusic(TITLE_LOOP_MUSIC); // Show JAM logo // if (!DoMovie(mv_intro,0)) MAIN_ERROR(PREDEMO_NOJAM); if (PowerBall) { Sint16 i; for (i=0;i<60 && (!DebugOk);i++) { VL_WaitVBL(1); // BBi ::in_handle_events(); if (Keyboard[sc_left_shift] && Keyboard[sc_right_shift]) { CA_LoadAllSounds(); SD_MusicOff(); ::sd_play_player_sound(SHOOTDOORSND, bstone::AC_ITEM); SD_WaitSoundDone(); ClearMemory(); DebugOk = 1; CA_CacheAudioChunk(STARTMUSIC+TITLE_LOOP_MUSIC); ::SD_StartMusic(TITLE_LOOP_MUSIC); } } } //--------------------- // PC-13 //--------------------- VL_Bar(0,0,320,200,0x14); CacheDrawPic(0,64,PC13PIC); VW_UpdateScreen(); VW_FadeIn(); IN_UserInput(TickBase*2); // Do A Red Flash! VL_FadeOut (0, 255, 39, 0, 0, 20); VW_FadeOut(); } #endif // SKIP_TITLE_AND_CREDITS }
//------------------------------------------------------------------------ // InitGame() //------------------------------------------------------------------------ void InitGame (void) { Sint16 i,x,y; Uint16 *blockstart; //long mmsize; MM_Startup (); // so the signon screen can be freed #if IN_DEVELOPMENT || GEORGE_CHEAT || SHOW_CHECKSUM if (MS_CheckParm("checksum")) { ShowChecksums(); MM_Shutdown(); exit(0); } #endif CA_Startup (); // Any problems with this version of the game? // #if IN_DEVELOPMENT || TECH_SUPPORT_VERSION if (!MS_CheckParm("nochex")) #endif #if !SKIP_CHECKSUMS CheckValidity("MAPTEMP.",MAPTEMP_CHECKSUM); #if GAME_VERSION != SHAREWARE_VERSION if (ChecksumFile("FILE_ID.DIZ",0) != DIZFILE_CHECKSUM) gamestate.flags |= GS_BAD_DIZ_FILE; #endif #endif VL_SetVGAPlaneMode (); VL_SetPalette (0,256,vgapal); VW_Startup (); IN_Startup (); PM_Startup (); SD_Startup (); US_Startup (); if (CheckForSpecialCode(POWERBALLTEXT)) #if IN_DEVELOPMENT DebugOk = true; #else PowerBall = true; #endif if (CheckForSpecialCode(TICSTEXT)) gamestate.flags |= GS_TICS_FOR_SCORE; if (CheckForSpecialCode(MUSICTEXT)) gamestate.flags |= GS_MUSIC_TEST; if (CheckForSpecialCode(RADARTEXT)) gamestate.flags |= GS_SHOW_OVERHEAD; #if IN_DEVELOPMENT // // Clear Monocrome // _fmemset(MK_FP(0xb000,0x0000),0,4000); #endif // // build some tables // InitDigiMap (); for (i=0;i<MAPSIZE;i++) { nearmapylookup[i] = &tilemap[0][0]+MAPSIZE*i; farmapylookup[i] = i*64; } for (i=0;i<PORTTILESHIGH;i++) uwidthtable[i] = UPDATEWIDE*i; blockstart = &blockstarts[0]; for (y=0;y<UPDATEHIGH;y++) for (x=0;x<UPDATEWIDE;x++) *blockstart++ = SCREENWIDTH*16*y+x*TILEWIDTH; updateptr = &update[0]; bufferofs = 0; displayofs = 0; ReadConfig (); // // draw intro screen stuff // // if (!(gamestate.flags & GS_QUICKRUN)) // IntroScreen (); // // load in and lock down some basic chunks // LoadFonts(); LoadLatchMem (); BuildTables (); // trig tables SetupWalls (); NewViewSize (); // // initialize variables // InitRedShifts (); }