// The original starting point of the game EXE void cat3d_exe_main (void) { //id0_short_t i; if (refkeen_current_gamever == BE_GAMEVER_CAT3D122) { if (BE_Cross_strcasecmp(id0_argv[1], "/VER") == 0) { BE_ST_printf("Catacomb 3-D version 1.22 (Rev 1)\n"); BE_ST_printf("Copyright 1991-93 Softdisk Publishing\n"); BE_ST_printf("Developed for use with 100%% IBM compatibles\n"); BE_ST_printf("that have 640K memory and DOS version 3.3 or later\n"); BE_ST_printf("and EGA graphics or better.\n"); BE_ST_HandleExit(0); } if (BE_Cross_strcasecmp(id0_argv[1], "/?") == 0) { BE_ST_printf("Catacomb 3-D version 1.22\n"); BE_ST_printf("Copyright 1991-93 Softdisk Publishing\n\n"); BE_ST_printf("Syntax:\n"); BE_ST_printf("CAT3D [/<switch>]\n\n"); BE_ST_printf("Switch What it does\n"); BE_ST_printf("/? This Information\n"); BE_ST_printf("/VER Display Program Version Information\n"); BE_ST_printf("/COMP Fix problems with SVGA screens\n"); BE_ST_printf("/NOAL No AdLib or SoundBlaster detection\n"); BE_ST_printf("/NOJOYS Tell program to ignore joystick\n"); BE_ST_printf("/NOMOUSE Tell program to ignore mouse\n"); BE_ST_printf("/HIDDENCARD Overrides video detection\n\n"); BE_ST_printf("Each switch must include a '/' and multiple switches\n"); BE_ST_printf("must be seperated by at least one space.\n\n"); BE_ST_HandleExit(0); } } // jabhack(); // REFKEEN - Commented out InitGame (); CheckMemory (); LoadLatchMem (); #ifdef PROFILE NewGame (); GameLoop (); #endif //NewGame (); //GameLoop (); DemoLoop(); Quit("Demo loop exited???"); }
void DemoLoop (void) { ///////////////////////////////////////////////////////////////////////////// // main game cycle ///////////////////////////////////////////////////////////////////////////// displayofs = bufferofs = 0; VW_Bar (0,0,320,200,0); VW_SetScreen(0,0); // // Read in all the graphic images needed for the title sequence // VW_WaitVBL(1); IN_ReadControl(0,&control); // set EASYMODE // if (BE_Cross_strcasecmp(id0_argv[2], "1") == 0) EASYMODEON = true; else EASYMODEON = false; // restore game // if (BE_Cross_strcasecmp(id0_argv[3], "1") == 0) { VW_FadeOut(); bufferofs = displayofs = 0; VW_Bar(0,0,320,200,0); if (GE_LoadGame()) { loadedgame = true; playstate = ex_loadedgame; Keyboard[sc_Enter] = true; VW_Bar(0,0,320,200,0); ColoredPalette(); } VW_Bar(0,0,320,200,0); VW_FadeIn(); } // Play a game // restartgame = gd_Normal; NewGame(); GameLoop(); }
void DemoLoop (void) { ///////////////////////////////////////////////////////////////////////////// // main game cycle ///////////////////////////////////////////////////////////////////////////// // displayofs = bufferofs = 0; // VW_Bar (0,0,320,200,0); // VW_SetScreen(0,0); // set EASYMODE // if (BE_Cross_strcasecmp(id0_argv[2], "1") == 0) EASYMODEON = true; else EASYMODEON = false; // restore game // if (BE_Cross_strcasecmp(id0_argv[3], "1") == 0) { VW_FadeOut(); bufferofs = displayofs = 0; VW_Bar(0,0,320,200,0); if (GE_LoadGame()) { loadedgame = true; playstate = ex_loadedgame; Keyboard[sc_Enter] = true; VW_Bar(0,0,320,200,0); ColoredPalette(); } VW_Bar(0,0,320,200,0); VW_FadeIn(); } // Play a game // restartgame = gd_Normal; NewGame(); GameLoop(); }
int BE_Cross_GetSortedRewritableFilenames_AsUpperCase(char *outFilenames, int maxNum, int strLenBound, const char *suffix) { struct dirent *direntry; size_t sufLen = strlen(suffix); char *nextFilename = outFilenames, *outFilenamesEnd = outFilenames + maxNum*strLenBound, *outFilenamesLast = outFilenamesEnd - strLenBound; char *checkFilename, *checkCh; DIR *dir; // For the sake of consistency we go over same paths as in file open for reading function const char *searchpaths[] = {g_be_selectedGameInstallation->writableVanillaFilesPath, g_be_selectedGameInstallation->path}; for (int loopvar = 0; loopvar < (int)(sizeof(searchpaths)/sizeof(*searchpaths)); ++loopvar) { dir = opendir(searchpaths[loopvar]); if (!dir) { continue; } for (direntry = readdir(dir); direntry; direntry = readdir(dir)) { size_t len = strlen(direntry->d_name); if ((len < sufLen) || BE_Cross_strcasecmp(direntry->d_name+len-sufLen, suffix)) { continue; } len -= sufLen; /*** Possibly a HACK - Modify d_name itself ***/ len = (len >= (size_t)strLenBound) ? (strLenBound-1) : len; direntry->d_name[len] = '\0'; // Convert to upper case for (checkCh = direntry->d_name; *checkCh; ++checkCh) { *checkCh = BE_Cross_toupper(*checkCh); } // This is basically insertion-sort, but we store // the *last* entries if there isn't enough room. for (checkFilename = outFilenames; checkFilename < nextFilename; checkFilename += strLenBound) { if (strcmp(checkFilename, direntry->d_name) > 0) { break; } } // Gone over all inserted entries if (checkFilename == nextFilename) { if (nextFilename < outFilenamesEnd) { memcpy(nextFilename, direntry->d_name, 1+len); nextFilename += strLenBound; } else { memmove(outFilenames, outFilenames+strLenBound, strLenBound*(maxNum-1)); memcpy(outFilenamesLast, direntry->d_name, 1+len); } } // Shift existing entries and insert new one else { // If there's room for another entry, shift "forward" if (nextFilename < outFilenamesEnd) { memmove(checkFilename + strLenBound, checkFilename, outFilenamesEnd-checkFilename-strLenBound); memcpy(checkFilename, direntry->d_name, 1+len); nextFilename += strLenBound; } // Otherwise shift "backwards", but only if there's already an entry "smaller" than current one else if (checkFilename != outFilenames) { memmove(outFilenames, outFilenames+strLenBound, (checkFilename-strLenBound)-outFilenames); memcpy(checkFilename-strLenBound, direntry->d_name, 1+len); } }; } closedir(dir); } return (nextFilename-outFilenames)/strLenBound; }
// The original starting point of the game EXE void kdreams_exe_main (void) { #if (!defined REFKEEN_VER_KDREAMS_CGA_ALL) || (!defined CATALOG) id0_boolean_t LaunchedFromShell = false; id0_short_t i; #endif #ifdef REFKEEN_VER_KDREAMS_CGA_ALL BE_ST_textcolor(7); BE_ST_textbackground(0); if (BE_Cross_strcasecmp(id0_argv[1], "/VER") == 0) { BE_ST_printf("KEEN DREAMS\n"); BE_ST_printf("CGA Version\n"); BE_ST_printf("Copyright 1991-93 Softdisk Publishing\n"); BE_ST_printf("Version 1.05 (rev 1)\n"); BE_ST_HandleExit(0); } if (BE_Cross_strcasecmp(id0_argv[1], "/?") == 0) { BE_ST_printf("\nKeen Dreams CGA version 1.05\n"); BE_ST_printf("Copyright 1991-1993 Softdisk Publishing.\n\n"); BE_ST_printf("Commander Keen is a trademark of Id Software.\n"); BE_ST_printf("Type KDREAMS from the DOS prompt to run.\n\n"); BE_ST_printf("KDREAMS /COMP for SVGA compatibility mode\n"); BE_ST_printf("KDREAMS /NODR stops program hang with the drive still on\n"); BE_ST_printf("KDREAMS /NOAL disables AdLib and Sound Blaster detection\n"); BE_ST_printf("KDREAMS /NOSB disables Sound Blaster detection\n"); BE_ST_printf("KDREAMS /NOJOYS ignores joystick\n"); BE_ST_printf("KDREAMS /NOMOUSE ignores mouse\n"); BE_ST_printf("KDREAMS /HIDDENCARD overrides video card detection\n"); BE_ST_printf("KDREAMS /VER for version and compatibility information\n"); BE_ST_printf("KDREAMS /? for this help information\n"); BE_ST_HandleExit(0); } #endif // VERSION // REFKEEN - The code is also in CGA v1.05 but LaunchedFromShell is ignored (while CATALOG is defined)... #if (!defined REFKEEN_VER_KDREAMS_CGA_ALL) || (!defined CATALOG) #ifndef REFKEEN_VER_KDREAMS_CGA_ALL if (refkeen_current_gamever == BE_GAMEVER_KDREAMSE113) #endif { for (i = 1;i < id0_argc;i++) { switch (US_CheckParm(id0_argv[i],EntryParmStrings)) { case 0: LaunchedFromShell = true; break; } } } #endif #ifndef REFKEEN_VER_KDREAMS_CGA_ALL if (refkeen_current_gamever == BE_GAMEVER_KDREAMSE193) { if (BE_Cross_strcasecmp(id0_argv[1], "/VER") == 0) { BE_ST_printf("\nKeen Dreams version 1.93 (Rev 1)\n"); BE_ST_printf("developed for use with 100%% IBM compatibles\n"); BE_ST_printf("that have 640K memory, DOS version 3.3 or later,\n"); BE_ST_printf("and an EGA or VGA display adapter.\n"); BE_ST_printf("Copyright 1991-1993 Softdisk Publishing.\n"); BE_ST_printf("Commander Keen is a trademark of Id Software.\n"); BE_ST_HandleExit(0); } if (BE_Cross_strcasecmp(id0_argv[1], "/?") == 0) { BE_ST_printf("\nKeen Dreams version 1.93\n"); BE_ST_printf("Copyright 1991-1993 Softdisk Publishing.\n\n"); BE_ST_printf("Commander Keen is a trademark of Id Software.\n"); BE_ST_printf("Type KDREAMS from the DOS prompt to run.\n\n"); BE_ST_printf("KDREAMS /COMP for SVGA compatibility mode\n"); BE_ST_printf("KDREAMS /NODR stops program hang with the drive still on\n"); BE_ST_printf("KDREAMS /NOAL disables AdLib and Sound Blaster detection\n"); BE_ST_printf("KDREAMS /NOSB disables Sound Blaster detection\n"); BE_ST_printf("KDREAMS /NOJOYS ignores joystick\n"); BE_ST_printf("KDREAMS /NOMOUSE ignores mouse\n"); BE_ST_printf("KDREAMS /HIDDENCARD overrides video card detection\n"); BE_ST_printf("KDREAMS /VER for version and compatibility information\n"); BE_ST_printf("KDREAMS /? for this help information\n"); BE_ST_HandleExit(0); } } #endif // VERSION #ifndef REFKEEN_VER_KDREAMS_CGA_ALL if (refkeen_current_gamever == BE_GAMEVER_KDREAMSE120) { for (i = 1;i < id0_argc;i++) { switch (US_CheckParm(id0_argv[i],EntryParmStrings)) { case 0: LaunchedFromShell = true; break; } if (BE_Cross_strcasecmp(id0_argv[i], "/VER") == 0) { BE_ST_printf("\nKeen Dreams Shareware Version 1.20 (Rev 1)\n"); BE_ST_printf("developed for use with 100%% IBM compatibles\n"); BE_ST_printf("that have 640K memory, DOS version 3.3 or later,\n"); BE_ST_printf("and an EGA or VGA display adapter.\n"); BE_ST_printf("Copyright 1991-1993 Softdisk Publishing.\n"); BE_ST_printf("Commander Keen is a trademark of Id Software.\n"); BE_ST_HandleExit(0); } if (BE_Cross_strcasecmp(id0_argv[i], "/?") == 0) { BE_ST_printf("\nKeen Dreams Shareware Version 1.20\n"); BE_ST_printf("Copyright 1991-1993 Softdisk Publishing.\n\n"); BE_ST_printf("Commander Keen is a trademark of Id Software.\n"); BE_ST_printf("Type KDREAMS from the DOS prompt to run.\n\n"); BE_ST_printf("KDREAMS /COMP for SVGA compatibility mode\n"); BE_ST_printf("KDREAMS /NODR stops program hang with the drive still on\n"); BE_ST_printf("KDREAMS /NOAL disables AdLib and Sound Blaster detection\n"); BE_ST_printf("KDREAMS /NOSB disables Sound Blaster detection\n"); BE_ST_printf("KDREAMS /NOJOYS ignores joystick\n"); BE_ST_printf("KDREAMS /NOMOUSE ignores mouse\n"); BE_ST_printf("KDREAMS /HIDDENCARD overrides video card detection\n"); BE_ST_printf("KDREAMS /VER for version and compatibility information\n"); BE_ST_printf("KDREAMS /? for this help information\n"); BE_ST_HandleExit(0); } } } #endif #if (!defined REFKEEN_VER_KDREAMS_CGA_ALL) || (!defined CATALOG) #ifndef REFKEEN_VER_KDREAMS_CGA_ALL if ((refkeen_current_gamever == BE_GAMEVER_KDREAMSE113) || (refkeen_current_gamever == BE_GAMEVER_KDREAMSE120)) #endif { // REFKEEN difference from vanilla Keen Dreams (Shareware releases): // Role of /DETOUR has been flipped. No need to pass it (or use START), // but if /DETOUR is added then you get this message. if (LaunchedFromShell) //if (!LaunchedFromShell) { BE_ST_clrscr(); BE_ST_puts("You must type START at the DOS prompt to run KEEN DREAMS."); BE_ST_HandleExit(0); } } #endif #ifndef REFKEEN_VER_KDREAMS_CGA_ALL if (refkeen_current_gamever != BE_GAMEVER_KDREAMSE113) { BE_ST_textcolor(7); BE_ST_textbackground(0); } #endif InitGame(); DemoLoop(); // DemoLoop calls Quit when everything is done Quit("Demo loop exited???"); }
int main(int argc, char **argv) { BE_ST_InitCommon(); #ifdef REFKEEN_CONFIG_ENABLE_CMDLINE // Parse arguments bool showHelp = false; #ifdef REFKEEN_VER_CATADVENTURES bool skipIntro = false; bool showSlides = false; #endif int selectedGameVerVal = BE_GAMEVER_LAST; #ifdef REFKEEN_PLATFORM_MACOS // A weird OS X hack, ignoring an argument possibly passed // if the app is launched from Finder (or with "open" command) if ((argc >= 2) && !strncmp(argv[1], "-psn_", 5)) { ++argv; --argc; } #endif #ifdef REFKEEN_ENABLE_LAUNCHER bool startLauncher = (argc == 1); #endif while ((argc >= 2) && !showHelp) { if (!(*argv[1])) { showHelp = true; } else if (!BE_Cross_strcasecmp(1+argv[1], "gamever")) { if ((argc == 2) || !(*argv[2])) { showHelp = true; break; } for (selectedGameVerVal = 0; selectedGameVerVal < BE_GAMEVER_LAST; ++selectedGameVerVal) { if (!BE_Cross_strcasecmp(argv[2], refkeen_gamever_strs[selectedGameVerVal])) break; } if (selectedGameVerVal == BE_GAMEVER_LAST) { showHelp = true; break; } argv += 2; argc -= 2; } #ifdef REFKEEN_VER_CATADVENTURES else if (!BE_Cross_strcasecmp(1+argv[1], "skipintro")) { skipIntro = true; ++argv; --argc; } else if (!BE_Cross_strcasecmp(1+argv[1], "showslides")) { showSlides = true; ++argv; --argc; } #endif else if (!BE_Cross_strcasecmp(1+argv[1], "passorigargs")) { // The remaining args will be passed to the // original game code as-is ++argv; --argc; break; } else if (!BE_Cross_strcasecmp(1+argv[1], "datadir") || !BE_Cross_strcasecmp(1+argv[1], "cfgdir")) { const char **be_main_arg_ptr = !BE_Cross_strcasecmp(1+argv[1], "datadir") ? &be_main_arg_datadir : &be_main_arg_newcfgdir; if ((argc == 2) || !(*argv[2])) { showHelp = true; break; } *be_main_arg_ptr = argv[2]; argv += 2; argc -= 2; } #ifdef REFKEEN_ENABLE_LAUNCHER else if (!BE_Cross_strcasecmp(1+argv[1], "fulllauncher")) { g_refKeenCfg.launcherWinType = LAUNCHER_WINDOW_FULL; startLauncher = true; ++argv; --argc; } else if (!BE_Cross_strcasecmp(1+argv[1], "softlauncher")) { g_refKeenCfg.launcherWinType = LAUNCHER_WINDOW_SOFTWARE; startLauncher = true; ++argv; --argc; } #endif else showHelp = true; } if (showHelp) { show_command_line_help(); } else { // HACK #ifdef REFKEEN_VER_CATABYSS #define catacombs_exe_main abysgame_exe_main #elif (defined REFKEEN_VER_CATARM) #define catacombs_exe_main armgame_exe_main #elif (defined REFKEEN_VER_CATAPOC) #define catacombs_exe_main apocgame_exe_main #endif // Main functions prototypes void abysgame_exe_main(void); void armgame_exe_main(void); void apocgame_exe_main(void); BE_Cross_PrepareGameInstallations(); #ifdef REFKEEN_ENABLE_LAUNCHER if (startLauncher) { BE_Launcher_Start(); } else #endif { #ifdef REFKEEN_VER_CATADVENTURES // Main functions prototypes void catacombs_exe_main(void); // See HACK above void slidecat_exe_main(void); BE_Cross_StartGame(selectedGameVerVal, argc, argv, showSlides ? &slidecat_exe_main : (skipIntro ? &catacombs_exe_main : NULL)); #else BE_Cross_StartGame(selectedGameVerVal, argc, argv, NULL); #endif } } #else // REFKEEN_CONFIG_ENABLE_CMDLINE BE_Cross_PrepareGameInstallations(); BE_Launcher_Start(); #endif // REFKEEN_CONFIG_ENABLE_CMDLINE BE_ST_ShutdownAll(); return 0; }
//---------------------------------------------------------------------------- // LoadLIBFile() -- Copies a file from an existing archive to dos. // // PARAMETERS : // // LibName - Name of lib file created with SoftLib V1.0 // // FileName - Name of file to load from lib file. // // MemPtr - (IF !NULL) - Pointer to memory to load into .. // (IF NULL) - Routine allocates necessary memory and // returns a MEM(SEG) pointer to memory allocated. // // RETURN : // // (IF !NULL) - A pointer to the loaded data. // (IF NULL) - Error! // //---------------------------------------------------------------------------- memptr LoadLIBFile(const id0_char_t *LibName,const id0_char_t *FileName,memptr *MemPtr) { BE_FILE_T handle; id0_unsigned_long_t header; struct ChunkHeader Header; id0_unsigned_long_t ChunkLen; id0_short_t x; struct FileEntryHdr FileEntry; // Storage for file once found struct FileEntryHdr FileEntryHeader; // Header used durring searching struct SoftLibHdr LibraryHeader; // Library header - Version Checking id0_boolean_t FileFound = false; id0_unsigned_long_t id_slib = ID_SLIB; id0_unsigned_long_t id_chunk = ID_CHUNK; // // OPEN SOFTLIB FILE // if (!BE_Cross_IsFileValid(handle = BE_Cross_open_for_reading(LibName))) //if ((handle = open(LibName,O_RDONLY|O_BINARY, S_IREAD)) == -1) return(NULL); // // VERIFY it is a SOFTLIB (SLIB) file // if (BE_Cross_readInt8LEBuffer(handle,&header,4) < 4) //if (read(handle,&header,4) == -1) { BE_Cross_close(handle); return(NULL); } if (header != id_slib) { BE_Cross_close(handle); return(NULL); } // // CHECK LIBRARY HEADER VERSION NUMBER // if (BE_Cross_readInt8LEBuffer(handle, &LibraryHeader,sizeof(struct SoftLibHdr)) < sizeof(struct SoftLibHdr)) //if (read(handle, &LibraryHeader,sizeof(struct SoftLibHdr)) == -1) Quit("read error in LoadSLIBFile()\n"); // REFKEEN - Big Endian support #ifdef REFKEEN_ARCH_BIG_ENDIAN LibraryHeader.Version = BE_Cross_Swap16LE(LibraryHeader.Version); LibraryHeader.FileCount = BE_Cross_Swap16LE(LibraryHeader.FileCount); #endif if (LibraryHeader.Version > SOFTLIB_VER) Quit("Unsupported file ver "); // // MANAGE FILE ENTRY HEADERS... // for (x = 1;x<=LibraryHeader.FileCount;x++) { if (BE_Cross_readInt8LEBuffer(handle, &FileEntryHeader,sizeof(struct FileEntryHdr)) < sizeof(struct FileEntryHdr)) //if (read(handle, &FileEntryHeader,sizeof(struct FileEntryHdr)) == -1) { BE_Cross_close(handle); return(NULL); } // REFKEEN - Big Endian support #ifdef REFKEEN_ARCH_BIG_ENDIAN FileEntryHeader.Offset = BE_Cross_Swap32LE(FileEntryHeader.Offset); FileEntryHeader.ChunkLen = BE_Cross_Swap32LE(FileEntryHeader.ChunkLen); FileEntryHeader.OrginalLength = BE_Cross_Swap32LE(FileEntryHeader.OrginalLength); FileEntryHeader.Compression = BE_Cross_Swap16LE(FileEntryHeader.Compression); #endif //if (!stricmp(FileEntryHeader.FileName,FileName)) if (!BE_Cross_strcasecmp(FileEntryHeader.FileName,FileName)) { FileEntry = FileEntryHeader; FileFound = true; } } // // IF FILE HAS BEEN FOUND THEN SEEK TO POSITION AND EXTRACT // ELSE RETURN WITH ERROR CODE... // if (FileFound) { if (BE_Cross_seek(handle,FileEntry.Offset,SEEK_CUR) == -1) { BE_Cross_close(handle); return(NULL); } // // READ CHUNK HEADER - Verify we are at the beginning of a chunk.. // if (BE_Cross_readInt8LEBuffer(handle,(id0_char_t *)&Header,sizeof(struct ChunkHeader)) < sizeof(struct ChunkHeader)) //if (read(handle,(id0_char_t *)&Header,sizeof(struct ChunkHeader)) == -1) Quit("LIB File - Unable to read Header!"); // REFKEEN - Big Endian support #ifdef REFKEEN_ARCH_BIG_ENDIAN // No need to swap Header.HeaderID, id_chunk (ID_CHUNK) should be adjusted Header.OrginalLength = BE_Cross_Swap32LE(Header.OrginalLength); Header.Compression = BE_Cross_Swap16LE(Header.Compression); #endif if (Header.HeaderID != id_chunk) Quit("LIB File - BAD HeaderID!"); // // Allocate memory if Necessary... // if (!*MemPtr) MM_GetPtr(MemPtr,FileEntry.OrginalLength); // // Calculate the length of the data (without the chunk header). // ChunkLen = FileEntry.ChunkLen - sizeof(struct ChunkHeader); // // Extract Data from file // switch (Header.Compression) { #if LZW_SUPPORT case ct_LZW: if (!InitBufferedIO(handle,&lzwBIO)) Quit("No memory for buffered I/O."); //lzwDecompress(&lzwBIO,MK_FP(*MemPtr,0),FileEntry.OrginalLength,(SRC_BFILE|DEST_MEM)); lzwDecompress(&lzwBIO,*MemPtr,FileEntry.OrginalLength,(SRC_BFILE|DEST_MEM)); FreeBufferedIO(&lzwBIO); break; #endif #if LZH_SUPPORT case ct_LZH: if (!InitBufferedIO(handle,&lzwBIO)) Quit("No memory for buffered I/O."); //lzhDecompress(&lzwBIO, MK_FP(*MemPtr,0), FileEntry.OrginalLength, ChunkLen, (SRC_BFILE|DEST_MEM)); lzhDecompress(&lzwBIO, *MemPtr, FileEntry.OrginalLength, ChunkLen, (SRC_BFILE|DEST_MEM)); FreeBufferedIO(&lzwBIO); break; #endif case ct_NONE: //if (!CA_FarRead(handle,MK_FP(*MemPtr,0),ChunkLen)) if (!CA_FarRead(handle,(id0_byte_t *)(*MemPtr),ChunkLen)) { // BE_Cross_close(handle); *MemPtr = NULL; } break; default: BE_Cross_close(handle); Quit("Unknown Chunk.Compression Type!"); break; } } else *MemPtr = NULL; BE_Cross_close(handle); return(*MemPtr); }
// The original starting point of the game EXE void apocgame_exe_main (void) { id0_short_t i; starting_level = 0; for (i = 1;i < id0_argc;i++) { switch (US_CheckParm(id0_argv[i],MainParmStrings)) { case 0: Flags |= FL_QUICK; break; case 1: starting_level = atoi(id0_argv[i]+1); if ((starting_level < 0) || (starting_level > LASTMAP-1)) starting_level = 0; break; case 2: BE_ST_printf("%s\n", GAMENAME); BE_ST_printf("Copyright 1992-93 Softdisk Publishing\n"); BE_ST_printf("%s %s\n",VERSION,REVISION); BE_ST_printf("\n"); BE_ST_HandleExit(0); break; case 3: Flags |= FL_NOMEMCHECK; break; case 4: Flags |= (FL_HELPTEST|FL_QUICK); break; } } // REFKEEN difference from vanilla Catacomb Adventures: // Role of ^(a@&r` for game EXE has been flipped. No need to pass it // (or use start/intro EXE), but if ^(a@&r` is added then you may get some message. if (!BE_Cross_strcasecmp(id0_argv[1], "^(a@&r`")) //if (BE_Cross_strcasecmp(id0_argv[1], "^(a@&r`")) Quit("You must type CATAPOC to run CATACOMB APOCALYPSE\n"); #if 0 MainHelpText.xl = 0; MainHelpText.yl = 0; MainHelpText.xh = 639; MainHelpText.yh = 199; MainHelpText.bgcolor = 7; MainHelpText.ltcolor = 15; MainHelpText.dkcolor = 8; #endif // jabhack(); BE_Cross_Brandomize(); // REFKEEN - Alternative controllers support extern BE_ST_ControllerMapping g_ingame_altcontrol_mapping_inackback; BE_ST_AltControlScheme_PrepareControllerMapping(&g_ingame_altcontrol_mapping_inackback); InitGame (); // CheckMemory (); LoadLatchMem (); // if (!LoadTextFile("MAINHELP."EXT,&MainHelpText)) // Quit("Can't load MAINHELP."EXT); #ifdef PROFILE NewGame (); GameLoop (); #endif DemoLoop(); Quit(NULL); }
void loadscn_exe_main (void) { id0_int_t step; id0_boolean_t pressedkey = false; if (!BE_Cross_strcasecmp(id0_argv[1], "/?")) { BE_ST_clrscr(); BE_ST_textcolor(15); BE_ST_textbackground(1); BE_ST_cprintf("\xD5\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xB8\r\n"); BE_ST_cprintf("\xB3 LOADSCN \xB3\r\n"); BE_ST_cprintf("\xB3 by Nolan Martin \xB3\r\n"); BE_ST_cprintf("\xB3 Copyright 1992 - Softdisk Publishing \xB3\r\n"); BE_ST_cprintf("\xD4\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xBE\r\n"); BE_ST_printf("\n"); BE_ST_printf("/VER - version number\n"); BE_ST_printf("/? - this help\n"); BE_ST_HandleExit(0); } if (!BE_Cross_strcasecmp(id0_argv[1], "/VER")) { BE_ST_clrscr(); BE_ST_textcolor(15); BE_ST_textbackground(1); BE_ST_cprintf("\xD5\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xB8\r\n"); BE_ST_cprintf("\xB3 LOADSCN \xB3\r\n"); BE_ST_cprintf("\xB3 by Nolan Martin \xB3\r\n"); BE_ST_cprintf("\xB3 Copyright 1992 - Softdisk Publishing \xB3\r\n"); BE_ST_cprintf("\xD4\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xBE\r\n"); BE_ST_printf("\n"); BE_ST_printf("%s %s\n", "LOADSCN ", " VERSION 1.10s QA[0]"); BE_ST_printf("\n"); BE_ST_printf("This program requires an EGA monitor or better,\n"); BE_ST_printf(" 640K, and MS-DOS 3.0 or better.\n"); BE_ST_HandleExit(0); } if (BE_Cross_strcasecmp(id0_argv[1], "LAST.SHL")) TrashProg("You must type START [ENTER] to run this program.\n"); videocard = VideoID(); if ((videocard != 3) && (videocard != 5)) TrashProg("You need an EGA or VGA monitor to run this program."); screenmode = 3; SetScreenMode(screenmode); SetScreen(0,0); if (ext_LoadShape("ARMAPC.ABS", &imagetoshow)) TrashProg("ERROR : Can't load image."); ext_MoveGfxDst(0, 200); UnpackEGAShapeToScreen(&imagetoshow, 0, 0); // REFKEEN - Alternative controllers support extern BE_ST_ControllerMapping g_ingame_altcontrol_mapping_inackback; BE_ST_AltControlScheme_PrepareControllerMapping(&g_ingame_altcontrol_mapping_inackback); // (REFKEEN) Add an artificial delay (screen not shown immediately on older machines) BE_ST_Delay(250); ScreenToScreen(8000, 0, 40, 200); for (step = 0; step < 10; ++step) { BE_ST_Delay(500); if (IsKeyPressed()) { pressedkey = true; WaitForKeyRelease(); } } if (!pressedkey) BE_ST_BiosScanCode(0); if (!ext_BLoad("LAST.ABS", &endscreen)) TrashProg("Can't load Compressed Text - Possibly corrupt file!"); screenmode = 1; SetScreenMode(screenmode); memcpy(BE_ST_GetTextModeMemoryPtr(), (id0_byte_t *)endscreen+7, 4000); BE_ST_MarkGfxForUpdate(); //_fmemcpy(MK_FP(0xB800,0), (byte far *)endscreen+7, 4000); BE_ST_MoveTextCursorTo(0, 23); // gotoxy(1, 24) BE_ST_HandleExit(0); }
// The original starting point of the game EXE void abysgame_exe_main (void) { id0_short_t i; starting_level = 0; for (i = 1;i < id0_argc;i++) { switch (US_CheckParm(id0_argv[i],MainParmStrings)) { case 0: Flags |= FL_QUICK; break; case 1: starting_level = atoi(id0_argv[i]+1); if ((starting_level < 0) || (starting_level > LASTMAP-1)) starting_level = 0; break; case 2: if (refkeen_current_gamever == BE_GAMEVER_CATABYSS113) { BE_ST_printf("%s %s %s\n",GAMENAME,VERSION,REVISION); } else { BE_ST_printf("%s %s rev %s\n",GAMENAME,VERSION,REVISION); } BE_ST_HandleExit(0); break; case 3: Flags |= FL_NOMEMCHECK; break; } } if (!BE_Cross_strcasecmp(id0_argv[1], "^(a@&r`")) LaunchedFromShell = true; // REFKEEN difference from vanilla Catacomb Adventures: // Role of ^(a@&r` for game EXE has been flipped. No need to pass it // (or use start/intro EXE), but if ^(a@&r` is added then you may get some message. if (LaunchedFromShell) //if (!LaunchedFromShell) { BE_ST_clrscr(); if (refkeen_current_gamever == BE_GAMEVER_CATABYSS113) { BE_ST_puts("You must type START at the DOS prompt to run CATACOMB ABYSS."); } else { BE_ST_puts("You must type CATABYSS at the DOS prompt to run CATACOMB ABYSS 3-D."); } BE_ST_HandleExit(0); } BE_Cross_Brandomize(); // REFKEEN - Alternative controllers support extern BE_ST_ControllerMapping g_ingame_altcontrol_mapping_inackback; BE_ST_AltControlScheme_PrepareControllerMapping(&g_ingame_altcontrol_mapping_inackback); InitGame (); LoadLatchMem (); #ifdef PROFILE NewGame (); GameLoop (); #endif DemoLoop(); Quit(NULL); }