void FreePlanet (void) { COUNT i, j; PLANET_ORBIT *Orbit = &pSolarSysState->Orbit; UninitSphereRotation (); StopMusic (); LockMutex (GraphicsLock); for (i = 0; i < sizeof (pSolarSysState->PlanetSideFrame) / sizeof (pSolarSysState->PlanetSideFrame[0]); ++i) { DestroyDrawable (ReleaseDrawable (pSolarSysState->PlanetSideFrame[i])); pSolarSysState->PlanetSideFrame[i] = 0; } // FreeLanderData (); DestroyStringTable (ReleaseStringTable (pSolarSysState->XlatRef)); pSolarSysState->XlatRef = 0; DestroyDrawable (ReleaseDrawable (pSolarSysState->TopoFrame)); pSolarSysState->TopoFrame = 0; DestroyColorMap (ReleaseColorMap (pSolarSysState->OrbitalCMap)); pSolarSysState->OrbitalCMap = 0; HFree (Orbit->lpTopoData); Orbit->lpTopoData = 0; DestroyDrawable (ReleaseDrawable (Orbit->TopoZoomFrame)); Orbit->TopoZoomFrame = 0; DestroyDrawable (ReleaseDrawable (Orbit->SphereFrame)); Orbit->SphereFrame = NULL; DestroyDrawable (ReleaseDrawable (Orbit->TintFrame)); Orbit->TintFrame = 0; Orbit->TintColor = BLACK_COLOR; DestroyDrawable (ReleaseDrawable (Orbit->ObjectFrame)); Orbit->ObjectFrame = 0; DestroyDrawable (ReleaseDrawable (Orbit->WorkFrame)); Orbit->WorkFrame = 0; HFree (Orbit->TopoColors); Orbit->TopoColors = NULL; HFree (Orbit->ScratchArray); Orbit->ScratchArray = NULL; if (Orbit->map_rotate && Orbit->light_diff) { for (j=0 ; j < MAP_HEIGHT+1 ; j++) { HFree (Orbit->map_rotate[j]); HFree (Orbit->light_diff[j]); } } HFree (Orbit->map_rotate); Orbit->map_rotate = NULL; HFree (Orbit->light_diff); Orbit->light_diff = NULL; DestroyStringTable (ReleaseStringTable ( pSolarSysState->SysInfo.PlanetInfo.DiscoveryString )); pSolarSysState->SysInfo.PlanetInfo.DiscoveryString = 0; FreeLanderFont (&pSolarSysState->SysInfo.PlanetInfo); // Need to make sure our own CONTEXTs are not active because // we will destroy them now SetContext (SpaceContext); DestroyPlanetContext (); DestroyScanContext (); UnlockMutex (GraphicsLock); }
static bool GenerateChmmr_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world) { if (matchWorld (solarSys, world, 1, MATCH_PLANET)) { if (GET_GAME_STATE (CHMMR_UNLEASHED)) { SET_GAME_STATE (GLOBAL_FLAGS_AND_DATA, 1 << 7); InitCommunication (CHMMR_CONVERSATION); if (GET_GAME_STATE (CHMMR_BOMB_STATE) == 2) { GLOBAL (CurrentActivity) |= END_INTERPLANETARY; } return true; } else if (GET_GAME_STATE (SUN_DEVICE_ON_SHIP) && !GET_GAME_STATE (ILWRATH_DECEIVED) && ActivateStarShip (ILWRATH_SHIP, SPHERE_TRACKING)) { PutGroupInfo (GROUPS_RANDOM, GROUP_SAVE_IP); ReinitQueue (&GLOBAL (ip_group_q)); assert (CountLinks (&GLOBAL (npc_built_ship_q)) == 0); CloneShipFragment (ILWRATH_SHIP, &GLOBAL (npc_built_ship_q), INFINITE_FLEET); SET_GAME_STATE (GLOBAL_FLAGS_AND_DATA, 1 << 6); GLOBAL (CurrentActivity) |= START_INTERPLANETARY; InitCommunication (ILWRATH_CONVERSATION); if (!(GLOBAL (CurrentActivity) & (CHECK_ABORT | CHECK_LOAD))) { GLOBAL (CurrentActivity) &= ~START_INTERPLANETARY; ReinitQueue (&GLOBAL (npc_built_ship_q)); GetGroupInfo (GROUPS_RANDOM, GROUP_LOAD_IP); } return true; } } else if (matchWorld (solarSys, world, 1, 0)) { /* Starbase */ LockMutex (GraphicsLock); LoadStdLanderFont (&solarSys->SysInfo.PlanetInfo); solarSys->SysInfo.PlanetInfo.DiscoveryString = CaptureStringTable (LoadStringTable (CHMMR_BASE_STRTAB)); DoDiscoveryReport (MenuSounds); DestroyStringTable (ReleaseStringTable ( solarSys->SysInfo.PlanetInfo.DiscoveryString)); solarSys->SysInfo.PlanetInfo.DiscoveryString = 0; FreeLanderFont (&solarSys->SysInfo.PlanetInfo); UnlockMutex (GraphicsLock); return true; } GenerateDefault_generateOrbital (solarSys, world); return true; }