// 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 Quit (const id0_char_t *error) { ShutdownId (); if (error && *error) { BE_ST_clrscr(); BE_ST_puts(error); BE_ST_puts("\n"); #ifdef REFKEEN_VER_KDREAMS_CGA_ALL // BE_ST_puts("For techinical assistance with running this software, type HELP at"); // BE_ST_puts(" the DOS prompt or call Softdisk Publishing at 1-318-221-8311"); #else if (refkeen_current_gamever == BE_GAMEVER_KDREAMSE113) { BE_ST_puts("For techinical assistance with running this software, type HELP at"); BE_ST_puts(" the DOS prompt or call Gamer's Edge at 1-318-221-8311"); } #endif // No additional lines for later versions (registered v1.93, shareware v1.20) BE_ST_HandleExit(1); } // TODO (REFKEEN) Maybe we can define CATALOG based on version? #if (!defined REFKEEN_VER_KDREAMS_CGA_ALL) || (!defined CATALOG) #ifndef REFKEEN_VER_KDREAMS_CGA_ALL if (refkeen_current_gamever == BE_GAMEVER_KDREAMSE113) #endif { id0_argc = 2; id0_argv[1] = "LAST.SHL"; id0_argv[2] = "ENDSCN.SCN"; id0_argv[3] = NULL; //if (execv("LOADSCN.EXE", _argv) == -1) // Quit("Couldn't find executable LOADSCN.EXE.\n"); void loadscn2_main(int argc, const char **argv); loadscn2_main(id0_argc+1, id0_argv); } #endif #if (defined REFKEEN_VER_KDREAMS_CGA_ALL) && (defined CATALOG) VW_SetScreenMode(TEXTGR); BE_ST_HandleExit(0); #endif // For all other versions (registered v1.93, shareware v1.20), just exit #ifndef REFKEEN_VER_KDREAMS_CGA_ALL if (refkeen_current_gamever != BE_GAMEVER_KDREAMSE113) { BE_ST_HandleExit(0); } #endif }
//--------------------------------------------------------------------------- // WritePtr() -- Outputs data to a particular ptr type // // PtrType MUST be of type DEST_TYPE. // // NOTE : For PtrTypes DEST_MEM a ZERO (0) is always returned. // //--------------------------------------------------------------------------- id0_char_t WritePtr(void **outfile, id0_unsigned_char_t data, id0_unsigned_t PtrType) { id0_int_t returnval = 0; switch (PtrType & DEST_TYPES) { case DEST_FILE: // REFKEEN: Actually DEST_FFILE but done for compatibility returnval = BE_Cross_putc(data, *(BE_FILE_T *)outfile); //write(*(int *)outfile,(id0_char_t *)&data,1); break; case DEST_FFILE: returnval = putc(data, *(FILE **)outfile); break; case DEST_IMEM: BE_ST_printf("WritePtr - unsupported ptr type\n"); BE_ST_HandleExit(0); break; case DEST_MEM: //*((id0_char_t id0_far *)*(id0_char_t id0_far **)outfile)++ = data; { id0_char_t **ptrptr = (id0_char_t **)outfile; *((*ptrptr)++) = data; } break; } return(returnval); }
void Quit (const id0_char_t *error) { void *finscreen; //id0_unsigned_t finscreen; if (refkeen_current_gamever == BE_GAMEVER_CAT3D100) { if (!error) { CA_SetAllPurge (); CA_CacheGrChunk (PIRACY); finscreen = grsegs[PIRACY]; //finscreen = (id0_unsigned_t)grsegs[PIRACY]; } } ShutdownId (); if (error && *error) { BE_ST_puts(error); BE_ST_HandleExit(1); } if (refkeen_current_gamever == BE_GAMEVER_CAT3D100) { if (!NoWait) { // REFKEEN - Alternative controllers support extern BE_ST_ControllerMapping g_ingame_altcontrol_mapping_inackback; BE_ST_AltControlScheme_PrepareControllerMapping(&g_ingame_altcontrol_mapping_inackback); memcpy(BE_ST_GetTextModeMemoryPtr(), finscreen, 4000); //movedata (finscreen,0,0xb800,0,4000); BE_ST_BiosScanCode (0); BE_ST_clrscr(); } } BE_ST_HandleExit(0); }
static void show_command_line_help() { char gameverstrbuffer[80] = ""; char *gameverstrptr = gameverstrbuffer, *gameverstrend = gameverstrbuffer + sizeof(gameverstrbuffer); for (int gameVerVal = 0; gameVerVal < BE_GAMEVER_LAST; ++gameVerVal) { if (gameVerVal < BE_GAMEVER_LAST-1) gameverstrptr = BE_Cross_safeandfastcstringcopy_2strs(gameverstrptr, gameverstrend, refkeen_gamever_strs[gameVerVal], ", "); else gameverstrptr = BE_Cross_safeandfastcstringcopy(gameverstrptr, gameverstrend, refkeen_gamever_strs[gameVerVal]); } // HACK - For text mode emulation (and exit handler) BE_ST_PrepareForGameStartupWithoutAudio(); BE_ST_puts("*** " REFKEEN_TITLE_AND_VER_STRING " - Command line arguments ***"); BE_ST_puts(""); #ifdef REFKEEN_ENABLE_LAUNCHER BE_ST_puts("Launcher is started unless any command line argument is passed."); BE_ST_puts(""); #endif BE_ST_puts("List of possible command line arguments:"); BE_ST_puts("-gamever <VER>: Select game version supported by this executable."); #ifdef REFKEEN_VER_CATADVENTURES BE_ST_puts("-skipintro: Skip what is found in the original intro EXE and start game."); #ifdef REFKEEN_VER_CATABYSS BE_ST_puts("-showslides: Show the electronic catalog / hint book."); #else BE_ST_puts("-showslides: Show the hint book."); #endif #endif BE_ST_puts("-passorigargs <...>: Pass all following arguments to the original game port."); BE_ST_puts("-datadir <...>: Specify an alternative path for game data (separated by ver.)."); BE_ST_puts("-cfgdir <...>: Specify an alternative path for new cfg files (not old CONFIG)."); #ifdef REFKEEN_ENABLE_LAUNCHER BE_ST_puts("-fulllauncher: Show a fullscreen launcher window."); BE_ST_puts("-softlauncher: Show a software-rendered launcher window (not fullscreen)."); #endif BE_ST_puts(""); BE_ST_puts("Note: The path passed to -datadir or -cfgdir is assumed to exist."); BE_ST_puts(""); BE_ST_puts("Supported game versions:"); BE_ST_printf("%s\n", gameverstrbuffer); BE_ST_HandleExit(0); }
void CheckMemory(void) { id0_byte_t *finscreen; //id0_unsigned_t finscreen; if (mminfo.nearheap+mminfo.farheap+mminfo.EMSmem+mminfo.XMSmem >= MINMEMORY) return; CA_CacheGrChunk (OUTOFMEM); finscreen = (id0_byte_t *)grsegs[OUTOFMEM]; //finscreen = (id0_unsigned_t)grsegs[OUTOFMEM]; ShutdownId (); memcpy(BE_ST_GetTextModeMemoryPtr(), finscreen+7, 4000); //movedata (finscreen,7,0xb800,0,4000); BE_ST_MoveTextCursorTo(0, 23); //gotoxy (1,24); BE_ST_HandleExit(1); }
void loadscn_TrashProg (const id0_char_t *OutMsg, ...) { va_list ap; if (OutMsg) { if (screenmode != 1) SetScreenMode(1); va_start(ap, OutMsg); if (OutMsg && *OutMsg) BE_ST_vprintf(OutMsg,ap); va_end(ap); } BE_ST_HandleExit(0); }
// 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???"); }
void Quit (const id0_char_t *error, ...) { id0_short_t exit_code=0; #ifndef CATALOG void *finscreen; //id0_unsigned_t finscreen; #endif va_list ap; va_start(ap,error); #ifndef CATALOG if (!error) { CA_SetAllPurge (); CA_CacheGrChunk (PIRACY); finscreen = grsegs[PIRACY]; //finscreen = (id0_unsigned_t)grsegs[PIRACY]; } #endif ShutdownId (); if (error && *error) { BE_ST_vprintf(error,ap); exit_code = 1; } #ifndef CATALOG else if (!NoWait) { memcpy(BE_ST_GetTextModeMemoryPtr(), finscreen, 4000); BE_ST_MarkGfxForUpdate(); //movedata (finscreen,0,0xb800,0,4000); BE_ST_BiosScanCode(0); } #endif va_end(ap); #ifndef CATALOG if (!error) { id0_argc = 2; id0_argv[1] = "LAST.SHL"; id0_argv[2] = "ENDSCN.SCN"; id0_argv[3] = NULL; #if 0 if (execv("LOADSCN.EXE", id0_argv) == -1) { BE_ST_clrscr(); BE_ST_puts("Couldn't find executable LOADSCN.EXE.\n"); BE_ST_HandleExit(1); } #endif void loadscn_exe_main(void); BE_Cross_Bexecv(loadscn_exe_main, id0_argv, NULL, false); } #endif BE_ST_HandleExit(exit_code); }
// 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); }
void Quit (const id0_char_t *error, ...) { id0_short_t exit_code=0; void *finscreen; //id0_unsigned_t finscreen; va_list ap; va_start(ap,error); if (!error) { CA_SetAllPurge (); if (!refkeen_compat_c4_main_def_catalog) { CA_CacheGrChunk (PIRACY); finscreen = grsegs[PIRACY]; //finscreen = (id0_unsigned_t)grsegs[PIRACY]; } } ShutdownId (); if (error && *error) { BE_ST_vprintf(error,ap); exit_code = 1; } else if (!refkeen_compat_c4_main_def_catalog) { if ((refkeen_current_gamever == BE_GAMEVER_CATABYSS124) || !NoWait) { memcpy(BE_ST_GetTextModeMemoryPtr(), finscreen, 4000); BE_ST_MarkGfxForUpdate(); //movedata (finscreen,0,0xb800,0,4000); if (refkeen_current_gamever == BE_GAMEVER_CATABYSS124) { if (BE_ST_KbHit()) { while (BE_ST_KbHit()) BE_ST_BiosScanCode(0); } } BE_ST_BiosScanCode(0); } } va_end(ap); if (!refkeen_compat_c4_main_def_catalog) { if (!error) { id0_argc = 2; id0_argv[1] = "LAST.SHL"; id0_argv[2] = "ENDSCN.SCN"; id0_argv[3] = NULL; #if 0 if (execv("LOADSCN.EXE", id0_argv) == -1) { BE_ST_clrscr(); BE_ST_puts("Couldn't find executable LOADSCN.EXE.\n"); BE_ST_HandleExit(1); } #endif void loadscn_exe_main(void); BE_Cross_Bexecv(loadscn_exe_main, id0_argv, NULL, false); } } BE_ST_HandleExit(exit_code); }
// 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); }