/** * @brief onDestroy Callback for Antimatter Storage */ static void B_Destroy_AntimaterStorage_f (void) { base_t *base; const float prob = frand(); if (cgi->Cmd_Argc() < 4) { /** note: third parameter not used but we must be sure we have probability parameter */ Com_Printf("Usage: %s <probability> <baseID> <buildingType>\n", cgi->Cmd_Argv(0)); return; } base = B_GetFoundedBaseByIDX(atoi(cgi->Cmd_Argv(2))); if (!base) return; if (CAP_GetCurrent(base, CAP_ANTIMATTER) <= 0) return; CAP_RemoveAntimatterExceedingCapacity(base); if (base->baseStatus != BASE_WORKING) return; if (prob < atof(cgi->Cmd_Argv(1))) { MS_AddNewMessage(_("Notice"), va(_("%s has been destroyed by an antimatter storage breach."), base->name)); cgi->UI_PopWindow(false); B_Destroy(base); } }
/** * @brief Base attack mission ends: UFO leave earth. * @note Base attack mission -- Stage 3 * @note UFO attacking this base will be redirected when notify function will be called, don't set new destination here. */ void CP_BaseAttackMissionDestroyBase (mission_t *mission) { base_t *base = mission->data.base; assert(base); /* Base attack is over, alien won */ Com_sprintf(cp_messageBuffer, sizeof(cp_messageBuffer), _("Your base: %s has been destroyed! All employees killed and all equipment destroyed."), base->name); MS_AddNewMessage(_("Notice"), cp_messageBuffer, qfalse, MSG_STANDARD, NULL); B_Destroy(base); CL_GameTimeStop(); /* we really don't want to use the fake aircraft anywhere */ MAP_SetMissionAircraft(NULL); /* HACK This hack is only needed until base will be really destroyed * we must recalculate items in storage because of the items we collected on battlefield */ B_UpdateStorageCap(base); base->aircraftCurrent = NULL; base->baseStatus = BASE_WORKING; }