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 PollControls (void) { Sint16 max,min,i; Uint8 buttonbits; controlx = 0; controly = 0; memcpy (buttonheld,buttonstate,sizeof(buttonstate)); memset (buttonstate,0,sizeof(buttonstate)); #ifdef MYPROFILE controlx = 100; // just spin in place return; #endif if (demoplayback) { // // read commands from demo buffer // buttonbits = *demoptr++; for (i=0;i<NUMBUTTONS;i++) { buttonstate[i] = buttonbits&1; buttonbits >>= 1; } controlx = *demoptr++; controly = *demoptr++; tics = *demoptr++; while (TimeCount-lasttimecount < tics) ; lasttimecount = TimeCount; if (demoptr == lastdemoptr) playstate = ex_completed; // demo is done controlx *= tics; controly *= tics; return; } // // get timing info for last frame // CalcTics (); // BBi ::in_handle_events(); // // get button states // PollKeyboardButtons (); if (mouseenabled) PollMouseButtons (); if (joystickenabled) PollJoystickButtons (); #if 0 if (buttonstate[bt_run]) VL_ColorBorder (1); else VL_ColorBorder (0); #endif // // get movements // PollKeyboardMove (); if (mouseenabled) PollMouseMove (); if (joystickenabled) PollJoystickMove (); // // bound movement to a maximum // max = 100*tics; min = -max; if (controlx > max) controlx = max; else if (controlx < min) controlx = min; if (controly > max) controly = max; else if (controly < min) controly = min; #ifdef DEMOS_EXTERN if (demorecord) { // // save info out to demo buffer // controlx /= (Sint16)tics; controly /= (Sint16)tics; buttonbits = 0; for (i=NUMBUTTONS-1;i>=0;i--) { buttonbits <<= 1; if (buttonstate[i]) buttonbits |= 1; } *demoptr++ = buttonbits; *demoptr++ = controlx; *demoptr++ = controly; *demoptr++ = tics; if (demoptr >= lastdemoptr) PLAY_ERROR(POLLCONTROLS_DEMO_OV); controlx *= (Sint16)tics; controly *= (Sint16)tics; } #endif }