/* ===================== = = CacheLayoutGraphics = = Scans an entire layout file (until a ^E) marking all graphics used, and = counting pages, then caches the graphics in = ===================== */ void CacheLayoutGraphics (void) { char *bombpoint, *textstart; char ch; textstart = text; bombpoint = text+30000; numpages = pagenum = 0; do { if (*text == '^') { ch = toupper(*++text); if (ch == 'P') // start of a page numpages++; if (ch == 'E') // end of file, so load graphics and return { CA_MarkGrChunk(H_TOPWINDOWPIC); CA_MarkGrChunk(H_LEFTWINDOWPIC); CA_MarkGrChunk(H_RIGHTWINDOWPIC); CA_MarkGrChunk(H_BOTTOMINFOPIC); CA_CacheMarks (); text = textstart; return; } if (ch == 'G') // draw graphic command, so mark graphics { ParsePicCommand (); CA_MarkGrChunk (picnum); } if (ch == 'T') // timed draw graphic command, so mark graphics { ParseTimedCommand (); CA_MarkGrChunk (picnum); } } else text++; } while (text<bombpoint); Quit ("CacheLayoutGraphics: No ^E to terminate file!"); }
void InitGame (void) { //id0_unsigned_t segstart,seglength; id0_int_t i,x,y; id0_unsigned_t *blockstart; if (refkeen_current_gamever == BE_GAMEVER_CAT3D100) { US_TextScreen(); } MM_Startup (); VW_Startup (); #ifndef PROFILE IN_Startup (); SD_Startup (); #endif US_Startup (); if (refkeen_current_gamever == BE_GAMEVER_CAT3D100) { US_UpdateTextScreen(); } CA_Startup (); US_Setup (); US_SetLoadSaveHooks(LoadTheGame,SaveTheGame,ResetGame); // // load in and lock down some basic chunks // CA_ClearMarks (); CA_MarkGrChunk(STARTFONT); CA_MarkGrChunk(STARTTILE8); CA_MarkGrChunk(STARTTILE8M); CA_MarkGrChunk(HAND1PICM); CA_MarkGrChunk(HAND2PICM); CA_MarkGrChunk(ENTERPLAQUEPIC); CA_CacheMarks (NULL); MM_SetLock (&grsegs[STARTFONT],true); MM_SetLock (&grsegs[STARTTILE8],true); MM_SetLock (&grsegs[STARTTILE8M],true); MM_SetLock (&grsegs[HAND1PICM],true); MM_SetLock (&grsegs[HAND2PICM],true); MM_SetLock (&grsegs[ENTERPLAQUEPIC],true); fontcolor = WHITE; // // build some tables // for (i=0;i<MAPSIZE;i++) nearmapylookup[i] = &tilemap[0][0]+MAPSIZE*i; 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; BuildTables (); // 3-d tables SetupScaling (); #ifndef PROFILE if (refkeen_current_gamever == BE_GAMEVER_CAT3D100) { US_FinishTextScreen(); } #endif // // reclaim the memory from the linked in text screen // // REFKEEN DIFFERENCE (FIXME: Should we "fix" this at all?) // - Don't handle this, a bit more complicated with our setup and the // difference is (probably) insignificant with well-defined behaviors // anyway... #if 0 segstart = FP_SEG(&introscn); seglength = 4000/16; if (FP_OFF(&introscn)) { segstart++; seglength--; } MML_UseSpace (segstart,seglength); #endif VW_SetScreenMode (GRMODE); VW_ColorBorder (3); VW_ClearVideo (BLACK); // // initialize variables // updateptr = &update[0]; // REFKEEN - Safe unaligned accesses *(updateptr + UPDATEWIDE*PORTTILESHIGH) = 1; *(updateptr + UPDATEWIDE*PORTTILESHIGH + 1) = 3; //*(id0_unsigned_t *)(updateptr + UPDATEWIDE*PORTTILESHIGH) = UPDATETERMINATE; bufferofs = 0; displayofs = 0; VW_SetLineWidth(SCREENWIDTH); }
void CK_InitGame() { // Can't do much without memory! MM_Startup(); //TODO: Get filenames/etc from config/episode // Load the core datafiles CA_Startup(); // Setup saved games handling US_Setup(); // Set a few Menu Callbacks // TODO: Finish this! US_SetMenuFunctionPointers(&CK_LoadGame, &CK_SaveGame, &CK_ExitMenu); // Set ID engine Callbacks ca_beginCacheBox = CK_BeginCacheBox; ca_updateCacheBox = CK_UpdateCacheBox; ca_finishCacheBox = CK_FinishCacheBox; // Mark some chunks we'll need. CA_ClearMarks(); CA_MarkGrChunk(FON_MAINFONT); CA_MarkGrChunk(ca_gfxInfoE.offTiles8); CA_MarkGrChunk(ca_gfxInfoE.offTiles8m); CA_MarkGrChunk(MPIC_STATUSLEFT); CA_MarkGrChunk(MPIC_STATUSRIGHT); CA_MarkGrChunk(PIC_TITLESCREEN); // Moved from CA_Startup CA_CacheMarks(0); // Lock them chunks in memory. CA_LockGrChunk(FON_MAINFONT); MM_SetLock(&ca_graphChunks[ca_gfxInfoE.offTiles8], true); MM_SetLock(&ca_graphChunks[ca_gfxInfoE.offTiles8m], true); MM_SetLock(&ca_graphChunks[MPIC_STATUSLEFT], true); MM_SetLock(&ca_graphChunks[MPIC_STATUSRIGHT], true); // Compile the actions CK_ACT_SetupFunctions(); CK_KeenSetupFunctions(); CK_OBJ_SetupFunctions(); CK_Map_SetupFunctions(); CK_Misc_SetupFunctions(); ck_currentEpisode->setupFunctions(); CK_ACT_LoadActions("ACTION.EXT"); // Setup the screen VL_InitScreen(); // TODO: Palette initialization should be done in the terminator code VL_SetDefaultPalette(); // Setup input IN_Startup(); // Setup audio SD_Startup(); US_Startup(); // Wolf loads fonts here, but we do it in CA_Startup()? RF_Startup(); VL_ColorBorder(3); VL_ClearScreen(0); VL_Present(); // Create a surface for the dropdown menu ck_statusSurface = VL_CreateSurface(STATUS_W+64, STATUS_H+16); }
void InitGame() { MM_Startup(); id0_int_t i; /*#if 0 // Handle piracy screen... // movedata(FP_SEG(PIRACY),(id0_unsigned_t)PIRACY,0xb800,displayofs,4000); while (BE_ST_BiosScanCode(0) != sc_Return); //while ((bioskey(0)>>8) != sc_Return); #endif*/ #if GRMODE == EGAGR if (mminfo.mainmem < 335l*1024) { //#pragma warn -pro //#pragma warn -nod #ifdef REFKEEN_VER_KDREAMS_CGA_ALL BE_ST_textcolor(7); #endif #ifndef REFKEEN_VER_KDREAMS_CGA_ALL if (refkeen_current_gamever == BE_GAMEVER_KDREAMSE113) #endif { BE_ST_textbackground(0); } //#pragma warn +nod //#pragma warn +pro BE_ST_clrscr(); // we can't include CONIO because of a name conflict //#pragma warn +nod //#pragma warn +pro BE_ST_puts ("There is not enough memory available to play the game reliably. You can"); BE_ST_puts ("play anyway, but an out of memory condition will eventually pop up. The"); BE_ST_puts ("correct solution is to unload some TSRs or rename your CONFIG.SYS and"); BE_ST_puts ("AUTOEXEC.BAT to free up more memory.\n"); BE_ST_puts ("Do you want to (Q)uit, or (C)ontinue?"); //i = bioskey (0); //if ( (i>>8) != sc_C) i = BE_ST_BiosScanCode (0); if (i != sc_C) Quit (""); } #endif US_TextScreen(); VW_Startup (); RF_Startup (); IN_Startup (); SD_Startup (); US_Startup (); #ifdef REFKEEN_VER_KDREAMS_CGA_ALL US_UpdateTextScreen(); #endif CA_Startup (); US_Setup (); // // load in and lock down some basic chunks // CA_ClearMarks (); CA_MarkGrChunk(STARTFONT); CA_MarkGrChunk(STARTFONTM); CA_MarkGrChunk(STARTTILE8); CA_MarkGrChunk(STARTTILE8M); for ( id0_int_t j=KEEN_LUMP_START ; j<=KEEN_LUMP_END ; j++) { CA_MarkGrChunk(j); } #ifdef REFKEEN_VER_KDREAMS_CGA_ALL CA_CacheMarks (NULL); #elif defined REFKEEN_VER_KDREAMS_ANYEGA_ALL CA_CacheMarks (NULL, 0); #endif MM_SetLock (&grsegs[STARTFONT],true); MM_SetLock (&grsegs[STARTFONTM],true); MM_SetLock (&grsegs[STARTTILE8],true); MM_SetLock (&grsegs[STARTTILE8M],true); for ( id0_int_t j=KEEN_LUMP_START ; j<=KEEN_LUMP_END ; j++) { MM_SetLock (&grsegs[j],true); } setupAudio(); fontcolor = WHITE; RefKeen_FillObjStatesWithDOSPointers(); // Saved games compatibility US_FinishTextScreen(); }
void InitGame (void) { //id0_unsigned_t segstart,seglength; id0_int_t i,x,y; id0_unsigned_t *blockstart; // US_TextScreen(); MM_Startup (); VW_Startup (); #ifndef PROFILE IN_Startup (); SD_Startup (); #endif US_Startup (); CA_Startup (); US_Setup (); US_SetLoadSaveHooks(LoadTheGame,SaveTheGame,ResetGame); // // load in and lock down some basic chunks // CA_ClearMarks (); CA_MarkGrChunk(STARTFONT); CA_MarkGrChunk(STARTTILE8); CA_MarkGrChunk(STARTTILE8M); CA_MarkGrChunk(HAND1PICM); CA_MarkGrChunk(NORTHICONSPR); CA_CacheMarks (NULL); MM_SetLock (&grsegs[STARTFONT],true); MM_SetLock (&grsegs[STARTTILE8],true); MM_SetLock (&grsegs[STARTTILE8M],true); MM_SetLock (&grsegs[HAND1PICM],true); fontcolor = WHITE; // // build some tables // for (i=0;i<MAPSIZE;i++) nearmapylookup[i] = &tilemap[0][0]+MAPSIZE*i; 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; BuildTables (); // 3-d tables SetupScaling (); #ifndef PROFILE // US_FinishTextScreen(); #endif #if 0 // // reclaim the memory from the linked in text screen // segstart = FP_SEG(&introscn); seglength = 4000/16; if (FP_OFF(&introscn)) { segstart++; seglength--; } MML_UseSpace (segstart,seglength); #endif VW_SetScreenMode (GRMODE); ge_textmode = false; // VW_ColorBorder (3); VW_ClearVideo (BLACK); // // initialize variables // updateptr = &update[0]; // REFKEEN - Safe unaligned accesses *(updateptr + UPDATEWIDE*PORTTILESHIGH) = 1; *(updateptr + UPDATEWIDE*PORTTILESHIGH + 1) = 3; //*(id0_unsigned_t *)(updateptr + UPDATEWIDE*PORTTILESHIGH) = UPDATETERMINATE; bufferofs = 0; displayofs = 0; VW_SetLineWidth(SCREENWIDTH); }