void systemShutdown(void) { pie_ShutdownRadar(); if (mod_list) { free(mod_list); } shutdownEffectsSystem(); wzSceneEnd("Main menu loop"); keyClearMappings(); // free up all the load functions (all the data should already have been freed) resReleaseAll(); if (!multiShutdown()) // ajl. init net stuff { debug(LOG_FATAL, "Unable to multiShutdown() cleanly!"); abort(); } debug(LOG_MAIN, "shutting down audio subsystems"); debug(LOG_MAIN, "shutting down CD audio"); cdAudio_Close(); if ( audio_Disabled() == false && !audio_Shutdown() ) { debug(LOG_FATAL, "Unable to audio_Shutdown() cleanly!"); abort(); } debug(LOG_MAIN, "shutting down graphics subsystem"); levShutDown(); widgShutDown(); fpathShutdown(); mapShutdown(); debug(LOG_MAIN, "shutting down everything else"); pal_ShutDown(); // currently unused stub frameShutDown(); // close screen / SDL / resources / cursors / trig screenShutDown(); closeConfig(); // "registry" close cleanSearchPath(); // clean PHYSFS search paths debug_exit(); // cleanup debug routines PHYSFS_deinit(); // cleanup PHYSFS (If failure, state of PhysFS is undefined, and probably badly screwed up.) // NOTE: Exception handler is cleaned via atexit(ExchndlShutdown); }
// //////////////////////////////////////////////////////////////////////////// bool runKeyMapEditor(void) { UDWORD id; id = widgRunScreen(psWScreen); // Run the current set of widgets if(id == KM_RETURN) // return { saveKeyMap(); changeTitleMode(OPTIONS); } if(id == KM_DEFAULT) { keyClearMappings(); keyInitMappings(true); widgDelete(psWScreen,FRONTEND_BACKDROP);// readd the widgets startKeyMapEditor(false); } else if( id>=KM_START && id<=KM_END) { pushedKeyMap(id); } if(selectedKeyMap) { KEY_CODE kc = scanKeyBoardForBinding(); if (kc) { pushedKeyCombo(kc); } } widgDisplayScreen(psWScreen); // show the widgets currently running if (CancelPressed()) { changeTitleMode(OPTIONS); } return true; }
// //////////////////////////////////////////////////////////////////////////// bool runKeyMapEditor(void) { WidgetTriggers const &triggers = widgRunScreen(psWScreen); unsigned id = triggers.empty()? 0 : triggers.front().widget->id; // Just use first click here, since the next click could be on another menu. if(id == KM_RETURN) // return { saveKeyMap(); changeTitleMode(OPTIONS); } if(id == KM_DEFAULT) { keyClearMappings(); keyInitMappings(true); widgDelete(psWScreen,FRONTEND_BACKDROP);// readd the widgets startKeyMapEditor(false); } else if( id>=KM_START && id<=KM_END) { pushedKeyMap(id); } if(selectedKeyMap) { KEY_CODE kc = scanKeyBoardForBinding(); if (kc) { pushedKeyCombo(kc); } } widgDisplayScreen(psWScreen); // show the widgets currently running if (CancelPressed()) { changeTitleMode(OPTIONS); } return true; }
// //////////////////////////////////////////////////////////////////////////// BOOL runKeyMapEditor(void) { UDWORD id; id = widgRunScreen(psWScreen); // Run the current set of widgets if(id == KM_RETURN) // return { saveKeyMap(); changeTitleMode(TITLE); } if(id == KM_DEFAULT) { keyClearMappings(); keyInitMappings(TRUE); widgDelete(psWScreen,FRONTEND_BACKDROP);// readd the widgets startKeyMapEditor(FALSE); } else if( id>=KM_START && id<=KM_END) { pushedKeyMap(id); } if(selectedKeyMap) { id = scanKeyBoardForBinding(); if(id) { pushedKeyCombo(id); } } DrawBegin(); StartCursorSnap(&InterfaceSnap); widgDisplayScreen(psWScreen); // show the widgets currently running DrawEnd(); return TRUE; }
bool stageTwoInitialise(void) { int i; debug(LOG_WZ, "== stageTwoInitalise =="); // make sure we clear on loading; this a bad hack to fix a bug when // loading a savegame where we are building a lassat for (i = 0; i < MAX_PLAYERS; i++) { setLasSatExists(false, i); } if(bMultiPlayer) { if (!multiTemplateSetup()) { return false; } } if (!dispInitialise()) /* Initialise the display system */ { return false; } if(!initMiscImds()) /* Set up the explosions */ { iV_ShutDown(); debug( LOG_FATAL, "Can't find all the explosions graphics?" ); abort(); return false; } if (!cmdDroidInit()) { return false; } /* Shift the interface initialisation here temporarily so that it can pick up the stats after they have been loaded */ if (!intInitialise()) { return false; } if (!initMessage()) /* Initialise the message heaps */ { return false; } if (!gwInitialise()) { return false; } // keymappings keyClearMappings(); keyInitMappings(false); // Set the default uncoloured cursor here, since it looks slightly // better for menus and such. wzSetCursor(CURSOR_DEFAULT); SetFormAudioIDs(ID_SOUND_WINDOWOPEN,ID_SOUND_WINDOWCLOSE); // Setup game queues. // Don't ask why this doesn't go in stage three. In fact, don't even ask me what stage one/two/three is supposed to mean, it seems about as descriptive as stage doStuff, stage doMoreStuff and stage doEvenMoreStuff... debug(LOG_MAIN, "Init game queues, I am %d.", selectedPlayer); sendQueuedDroidInfo(); // Discard any pending orders which could later get flushed into the game queue. for (i = 0; i < MAX_PLAYERS; ++i) { NETinitQueue(NETgameQueue(i)); if (!myResponsibility(i)) { NETsetNoSendOverNetwork(NETgameQueue(i)); } } debug(LOG_MAIN, "stageTwoInitialise: done"); return true; }
bool frontendInitialise(const char *ResourceFile) { debug(LOG_MAIN, "Initialising frontend : %s", ResourceFile); if(!InitialiseGlobals()) // Initialise all globals and statics everywhere. { return false; } iV_Reset(); // Reset the IV library. if (!scrTabInitialise()) // Initialise the script system { return false; } if (!stringsInitialise()) // Initialise the string system { return false; } if (!objInitialise()) // Initialise the object system { return false; } if (!anim_Init()) { return false; } if ( !animObj_Init( init_ObjectDead ) ) { return false; } if (!allocPlayerPower()) //set up the PlayerPower for each player - this should only be done ONCE now { return false; } debug(LOG_MAIN, "frontEndInitialise: loading resource file ....."); if (!resLoad(ResourceFile, 0)) { //need the object heaps to have been set up before loading in the save game return false; } if (!dispInitialise()) // Initialise the display system { return false; } FrontImages = (IMAGEFILE*)resGetData("IMG", "frontend.img"); /* Shift the interface initialisation here temporarily so that it can pick up the stats after they have been loaded */ if (!intInitialise()) { return false; } // keymappings // clear out any existing mappings keyClearMappings(); keyInitMappings(false); // Set the default uncoloured cursor here, since it looks slightly // better for menus and such. wzSetCursor(CURSOR_DEFAULT); SetFormAudioIDs(-1,ID_SOUND_WINDOWCLOSE); // disable the open noise since distorted in 3dfx builds. initMiscVars(); gameTimeInit(); // hit me with some funky beats.... cdAudio_PlayTrack(SONG_FRONTEND); return true; }
// //////////////////////////////////////////////////////////////////////////// // load keymaps from registry. bool loadKeyMap(void) { KEY_STATUS status; KEY_CODE metaCode; KEY_CODE subCode; KEY_ACTION action; char name[128]; SDWORD count; UDWORD funcmap; char ver[8]; PHYSFS_file *pfile; PHYSFS_sint64 filesize; PHYSFS_sint64 countsize = 0; PHYSFS_sint64 length_read; // throw away any keymaps!! keyClearMappings(); if (!PHYSFS_exists(KeyMapPath)) { debug(LOG_WZ, "%s not found", KeyMapPath); return false; } pfile = PHYSFS_openRead(KeyMapPath); if (!pfile) { // NOTE: Changed to LOG_FATAL, since we want to inform user via pop-up (windows only) debug(LOG_FATAL, "loadKeyMap: [directory: %s] %s could not be opened: %s", PHYSFS_getRealDir(KeyMapPath), KeyMapPath, PHYSFS_getLastError()); assert(false); return false; } filesize = PHYSFS_fileLength(pfile); #define READ(var, size) \ length_read = PHYSFS_read(pfile, var, 1, size); \ countsize += length_read; \ if (length_read != size) { \ debug(LOG_FATAL, "loadKeyMap: Reading %s short: %s", \ KeyMapPath, PHYSFS_getLastError()); \ assert(false); \ (void) PHYSFS_close(pfile); \ return false; \ } READ(&count, sizeof(count)); READ(&ver, 8); // get version number. if (strncmp(ver, keymapVersion, 8) != 0) { /* If wrong version, create a new one instead. */ PHYSFS_close(pfile); return false; } for(; count > 0; count--) { READ(&name, 128); // name READ(&status, sizeof(KEY_STATUS)); // status READ(&metaCode, sizeof(KEY_CODE)); // metakey READ(&subCode, sizeof(KEY_CODE)); // subkey READ(&action, sizeof(KEY_ACTION)); // action READ(&funcmap, sizeof(funcmap)); // function // add mapping keyAddMapping( status, metaCode, subCode, action, keyMapSaveTable[funcmap],(char*)&name); } if (!PHYSFS_close(pfile)) { debug(LOG_ERROR, "Error closing %s: %s", KeyMapPath, PHYSFS_getLastError()); assert(false); return false; } if (countsize != filesize) { debug(LOG_FATAL, "File size different from bytes read!"); assert(false); } return true; }
// //////////////////////////////////////////////////////////////////////////// // load keymaps from registry. BOOL loadKeyMap(void) { KEY_STATUS status; KEY_CODE metaCode; KEY_CODE subCode; KEY_ACTION action; STRING name[128]; FILE *pFileHandle; SDWORD count; UDWORD funcmap; char ver[8]; // throw away any keymaps!! keyClearMappings(); pFileHandle = fopen("keymap.map", "rb"); // check file exists if (pFileHandle == NULL) { return FALSE; // failed } if (fread(&count, sizeof(UDWORD), 1, pFileHandle) != 1) { DBERROR(("Read failed for keymap load")); fclose(pFileHandle); return FALSE; } // get version number. // if not from current version, create a new one.. if(fread(&ver,8,1,pFileHandle) !=1) { fclose(pFileHandle); return FALSE; } if(strncmp(&ver,buildTime,8) != 0) // check { fclose(pFileHandle); return FALSE; } for(; count>0;count--) { // name if (fread(&name, 128, 1, pFileHandle) != 1) { DBERROR(("Read failed for keymap load")); fclose(pFileHandle); return FALSE; } // status if (fread(&status, sizeof(KEY_STATUS), 1, pFileHandle) != 1) { DBERROR(("Read failed for keymap load")); fclose(pFileHandle); return FALSE; } // metakey if (fread(&metaCode, sizeof(KEY_CODE), 1, pFileHandle) != 1) { DBERROR(("Read failed for keymap load")); fclose(pFileHandle); return FALSE; } // subkey if (fread(&subCode, sizeof(KEY_CODE), 1, pFileHandle) != 1) { DBERROR(("Read failed for keymap load")); fclose(pFileHandle); return FALSE; } // action if (fread(&action, sizeof(KEY_ACTION), 1, pFileHandle) != 1) { DBERROR(("Read failed for keymap load")); fclose(pFileHandle); return FALSE; } // function if (fread(&funcmap, sizeof(UDWORD), 1, pFileHandle) != 1) { DBERROR(("Read failed for keymap load")); fclose(pFileHandle); return FALSE; } // add mapping keyAddMapping( status, metaCode, subCode, action, keyMapSaveTable[funcmap],(char*)&name); } if (fclose(pFileHandle) != 0) { DBERROR(("Close failed for load key map.")); return FALSE; } return TRUE; }