void AppController::GameControllerStopCurrentLevel() { hdAssert(gameController != NULL); hdAssert(gameController->GetCurrentLevel() != NULL); hdAssert(m_levelPickerWorld != NULL); FreeMemory(); // Update the game stats from the recently played level UpdateGameStats(m_levelPickerWorld, gameController->GetCurrentLevel(), gameController->gameInfo); SaveGameState(); // Show the level picker controller. EnsureLevelPickerController(); InitLevelPickerWorld(); levelPickerController->PanToNewLevelBlock(); levelPickerController->ShowNewLevelMessage(gameController->GetLevelStats()); activeController = levelPickerController; activeController->AnimateShow(); // Free up the game controller resources delete gameController; gameController = NULL; DispatchMessages(); }
id0_boolean_t SaveTheGame(BE_FILE_T file) { id0_word_t i,compressed,expanded; objtype *o; memptr bigbuffer; if (BE_Cross_writeInt16LE(file, &FreezeTime) != 2) //if (!CA_FarWrite(file,(void id0_far *)&FreezeTime,sizeof(FreezeTime))) return(false); // (REFKEEN) Writing fields one-by-one in a cross-platform manner if (!SaveGameState(file, &gamestate)) //if (!CA_FarWrite(file,(void id0_far *)&gamestate,sizeof(gamestate))) return(false); if (BE_Cross_write_boolean_To16LE(file, &EASYMODEON) != 2) //if (!CA_FarWrite(file,(void id0_far *)&EASYMODEON,sizeof(EASYMODEON))) return(false); expanded = mapwidth * mapheight * 2; MM_GetPtr (&bigbuffer,expanded); for (i = 0;i < 3;i+=2) // Write planes 0 and 2 { // // leave a word at start of compressed data for compressed length // compressed = (id0_unsigned_t)CA_RLEWCompress ((id0_unsigned_t id0_huge *)mapsegs[i] ,expanded,((id0_unsigned_t id0_huge *)bigbuffer)+1,RLETAG); *(id0_unsigned_t id0_huge *)bigbuffer = compressed; if (BE_Cross_writeInt16LEBuffer(file, bigbuffer, compressed+2) != (id0_word_t)(compressed+2)) //if (!CA_FarWrite(file,(id0_byte_t id0_far *)bigbuffer,compressed+2) ) { MM_FreePtr (&bigbuffer); return(false); } } for (o = player;o;o = o->next) // (REFKEEN) Writing fields one-by-one in a cross-platform manner if (!SaveObject(file, o)) //if (!CA_FarWrite(file,(void id0_far *)o,sizeof(objtype))) { MM_FreePtr (&bigbuffer); return(false); } MM_FreePtr (&bigbuffer); return(true); }
id0_boolean_t SaveTheGame(BE_FILE_T file) { id0_word_t i,compressed,expanded; objtype *o; memptr bigbuffer; // save the sky and ground colors // REFKEEN - But not before converting to original 16-bit pointers (reusing i variable) i = GetSkyGndColorDOSPtrFromNativePointer(skycolor); if (BE_Cross_writeInt16LE(file, &i) != 2) //if (!CA_FarWrite(file,(void id0_far *)&skycolor,sizeof(skycolor))) return(false); i = GetSkyGndColorDOSPtrFromNativePointer(groundcolor); if (BE_Cross_writeInt16LE(file, &i) != 2) //if (!CA_FarWrite(file,(void id0_far *)&groundcolor,sizeof(groundcolor))) return(false); if (BE_Cross_writeInt16LE(file, &FreezeTime) != 2) //if (!CA_FarWrite(file,(void id0_far *)&FreezeTime,sizeof(FreezeTime))) return(false); // (REFKEEN) Writing fields one-by-one in a cross-platform manner if (!SaveGameState(file, &gamestate)) //if (!CA_FarWrite(file,(void id0_far *)&gamestate,sizeof(gamestate))) return(false); if (BE_Cross_write_boolean_To16LE(file, &EASYMODEON) != 2) //if (!CA_FarWrite(file,(void id0_far *)&EASYMODEON,sizeof(EASYMODEON))) return(false); expanded = mapwidth * mapheight * 2; MM_GetPtr (&bigbuffer,expanded); for (i = 0;i < 3;i+=2) // Write planes 0 and 2 { // // leave a word at start of compressed data for compressed length // compressed = (id0_unsigned_t)CA_RLEWCompress ((id0_unsigned_t id0_huge *)mapsegs[i] ,expanded,((id0_unsigned_t id0_huge *)bigbuffer)+1,RLETAG); *(id0_unsigned_t id0_huge *)bigbuffer = compressed; if (BE_Cross_writeInt16LEBuffer(file, bigbuffer, compressed+2) != (id0_word_t)(compressed+2)) //if (!CA_FarWrite(file,(id0_byte_t id0_far *)bigbuffer,compressed+2) ) { MM_FreePtr (&bigbuffer); return(false); } } for (o = player;o;o = o->next) // (REFKEEN) Writing fields one-by-one in a cross-platform manner if (!SaveObject(file, o)) //if (!CA_FarWrite(file,(void id0_far *)o,sizeof(objtype))) { MM_FreePtr (&bigbuffer); return(false); } MM_FreePtr (&bigbuffer); return(true); }
void AppController::FreeIdleMemory() { SaveGameState(); }