void MoonVoting(char plr) { int high = -1, val; val = brandom(100) + 1; if (val < 70) { high = 0; } else if (val < 78) { high = 1; } else if (val < 92) { high = 2; } else { high = 3; } if (high != -1) { switch (high) { case 0: Data->P[plr].AILunar = 1; PickModule(plr); MoonProgram(plr, 1); break; case 1: Data->P[plr].AILunar = 2; PickModule(plr); MoonProgram(plr, 2); break; case 2: Data->P[plr].AILunar = 3; PickModule(plr); MoonProgram(plr, 3); break; case 3: Data->P[plr].AILunar = 4; MoonProgram(plr, 4); break; default: break; } } return; }
void PCB_EDIT_FRAME::AutoPlaceModule( MODULE* Module, int place_mode, wxDC* DC ) { MODULE* currModule = NULL; wxPoint PosOK; wxPoint memopos; int error; LAYER_ID lay_tmp_TOP, lay_tmp_BOTTOM; // Undo: init list PICKED_ITEMS_LIST newList; newList.m_Status = UR_CHANGED; ITEM_PICKER picker( NULL, UR_CHANGED ); if( GetBoard()->m_Modules == NULL ) return; m_canvas->SetAbortRequest( false ); switch( place_mode ) { case PLACE_1_MODULE: currModule = Module; if( currModule == NULL ) return; currModule->SetIsPlaced( false ); currModule->SetNeedsPlaced( false ); break; case PLACE_OUT_OF_BOARD: break; case PLACE_ALL: if( !IsOK( this, _( "Footprints NOT LOCKED will be moved" ) ) ) return; break; case PLACE_INCREMENTAL: if( !IsOK( this, _( "Footprints NOT PLACED will be moved" ) ) ) return; break; } memopos = CurrPosition; lay_tmp_BOTTOM = g_Route_Layer_BOTTOM; lay_tmp_TOP = g_Route_Layer_TOP; RoutingMatrix.m_GridRouting = (int) GetScreen()->GetGridSize().x; // Ensure Board.m_GridRouting has a reasonable value: if( RoutingMatrix.m_GridRouting < Millimeter2iu( 0.25 ) ) RoutingMatrix.m_GridRouting = Millimeter2iu( 0.25 ); // Compute module parameters used in auto place if( genPlacementRoutingMatrix( GetBoard(), m_messagePanel ) == 0 ) return; int moduleCount = 0; Module = GetBoard()->m_Modules; for( ; Module != NULL; Module = Module->Next() ) { Module->SetNeedsPlaced( false ); switch( place_mode ) { case PLACE_1_MODULE: if( currModule == Module ) { // Module will be placed, add to undo. picker.SetItem( currModule ); newList.PushItem( picker ); Module->SetNeedsPlaced( true ); } break; case PLACE_OUT_OF_BOARD: Module->SetIsPlaced( false ); if( Module->IsLocked() ) break; if( !RoutingMatrix.m_BrdBox.Contains( Module->GetPosition() ) ) { // Module will be placed, add to undo. picker.SetItem( Module ); newList.PushItem( picker ); Module->SetNeedsPlaced( true ); } break; case PLACE_ALL: Module->SetIsPlaced( false ); if( Module->IsLocked() ) break; // Module will be placed, add to undo. picker.SetItem( Module ); newList.PushItem( picker ); Module->SetNeedsPlaced( true ); break; case PLACE_INCREMENTAL: if( Module->IsLocked() ) { Module->SetIsPlaced( false ); break; } if( !Module->NeedsPlaced() ) { // Module will be placed, add to undo. picker.SetItem( Module ); newList.PushItem( picker ); Module->SetNeedsPlaced( true ); } break; } if( Module->NeedsPlaced() ) // Erase from screen { moduleCount++; Module->Draw( m_canvas, DC, GR_XOR ); } else { genModuleOnRoutingMatrix( Module ); } } // Undo command: prepare list if( newList.GetCount() ) SaveCopyInUndoList( newList, UR_CHANGED ); int cnt = 0; wxString msg; while( ( Module = PickModule( this, DC ) ) != NULL ) { // Display some info about activity, module placement can take a while: msg.Printf( _( "Place footprint %d of %d" ), cnt, moduleCount ); SetStatusText( msg ); double initialOrient = Module->GetOrientation(); // Display fill area of interest, barriers, penalties. drawPlacementRoutingMatrix( GetBoard(), DC ); error = getOptimalModulePlacement( this, Module, DC ); double bestScore = MinCout; double bestRotation = 0.0; int rotAllowed; PosOK = CurrPosition; if( error == ESC ) goto end_of_tst; // Try orientations 90, 180, 270 degrees from initial orientation rotAllowed = Module->GetPlacementCost180(); if( rotAllowed != 0 ) { Rotate_Module( DC, Module, 1800.0, true ); error = getOptimalModulePlacement( this, Module, DC ); MinCout *= OrientPenality[rotAllowed]; if( bestScore > MinCout ) // This orientation is better. { PosOK = CurrPosition; bestScore = MinCout; bestRotation = 1800.0; } else { Rotate_Module( DC, Module, initialOrient, false ); } if( error == ESC ) goto end_of_tst; } // Determine if the best orientation of a module is 90. rotAllowed = Module->GetPlacementCost90(); if( rotAllowed != 0 ) { Rotate_Module( DC, Module, 900.0, true ); error = getOptimalModulePlacement( this, Module, DC ); MinCout *= OrientPenality[rotAllowed]; if( bestScore > MinCout ) // This orientation is better. { PosOK = CurrPosition; bestScore = MinCout; bestRotation = 900.0; } else { Rotate_Module( DC, Module, initialOrient, false ); } if( error == ESC ) goto end_of_tst; } // Determine if the best orientation of a module is -90. if( rotAllowed != 0 ) { Rotate_Module( DC, Module, 2700.0, true ); error = getOptimalModulePlacement( this, Module, DC ); MinCout *= OrientPenality[rotAllowed]; if( bestScore > MinCout ) // This orientation is better. { PosOK = CurrPosition; bestScore = MinCout; bestRotation = 2700.0; } else { Rotate_Module( DC, Module, initialOrient, false ); } if( error == ESC ) goto end_of_tst; } end_of_tst: if( error == ESC ) break; // Place module. CurrPosition = GetCrossHairPosition(); SetCrossHairPosition( PosOK ); PlaceModule( Module, DC ); bestRotation += initialOrient; if( bestRotation != Module->GetOrientation() ) Rotate_Module( DC, Module, bestRotation, false ); SetCrossHairPosition( CurrPosition ); Module->CalculateBoundingBox(); genModuleOnRoutingMatrix( Module ); Module->SetIsPlaced( true ); Module->SetNeedsPlaced( false ); } CurrPosition = memopos; RoutingMatrix.UnInitRoutingMatrix(); g_Route_Layer_TOP = lay_tmp_TOP; g_Route_Layer_BOTTOM = lay_tmp_BOTTOM; Module = GetBoard()->m_Modules; for( ; Module != NULL; Module = Module->Next() ) { Module->CalculateBoundingBox(); } GetBoard()->m_Status_Pcb = 0; Compile_Ratsnest( DC, true ); m_canvas->ReDraw( DC, true ); }
void AIMaster(char plr) { int val, i, P_total = 0, O_total = 0; char prg[2]; if (plr == 0) { Level_Check = (Data->Def.Lev1 == 0) ? 0 : 1; } else if (plr == 1) { Level_Check = (Data->Def.Lev2 == 0) ? 0 : 1; } // Randomly select the AI strategy P_total = brandom(100); if (Data->P[plr].AIStrategy[AI_STRATEGY] == 0) { if (P_total < 33) { Data->P[plr].AIStrategy[AI_STRATEGY] = 1; } else if (P_total < 66) { Data->P[plr].AIStrategy[AI_STRATEGY] = 2; } else { Data->P[plr].AIStrategy[AI_STRATEGY] = 3; } } Cur_Status = Equal; // *** check status *** for (i = 0; i < Data->P[plr].PastMissionCount; i++) { P_total += Data->P[plr].History[i].Prestige; } for (i = 0; i < Data->P[other(plr)].PastMissionCount; i++) { O_total += Data->P[other(plr)].History[i].Prestige; } if (P_total > O_total) { Cur_Status = Ahead; } else if (P_total == O_total) { Cur_Status = Equal; } else if (P_total < O_total) { Cur_Status = Behind; } if (Data->Year == 59 && Data->Season == 1) { Data->P[plr].AIStrategy[AI_BEGINNING_STRATEGY] = 0; } if (Data->P[plr].AstroDelay <= 0) { AIAstroPur(plr); } if (Data->P[plr].AIStat == 1) if (Data->Prestige[Prestige_OrbitalSatellite].Place == plr || Data->Prestige[Prestige_OrbitalSatellite].mPlace == plr) { Data->P[plr].AIStat = 2; } if (Data->P[plr].AIStat == 1 && PrestigeCheck(plr, Prestige_LunarFlyby) == 0 && Cur_Status == Behind) { Data->P[plr].AIStat = 2; } if (Data->P[plr].AIStat == 2 && Data->Year >= 61 && Data->Season == 0) { Data->P[plr].AIStat = 3; } if (Data->P[plr].AIStat <= 2) { if (GenPur(plr, PROBE_HARDWARE, PROBE_HW_ORBITAL)) { RDafford(plr, PROBE_HARDWARE, PROBE_HW_ORBITAL); } else { RDafford(plr, PROBE_HARDWARE, PROBE_HW_ORBITAL); } if (GenPur(plr, ROCKET_HARDWARE, ROCKET_HW_ONE_STAGE)) { RDafford(plr, ROCKET_HARDWARE, ROCKET_HW_ONE_STAGE); } else { RDafford(plr, ROCKET_HARDWARE, ROCKET_HW_ONE_STAGE); } Data->P[plr].Buy[PROBE_HARDWARE][PROBE_HW_ORBITAL] = 0; Data->P[plr].Buy[ROCKET_HARDWARE][ROCKET_HW_ONE_STAGE] = 0; Data->P[plr].Buy[MANNED_HARDWARE][MANNED_HW_ONE_MAN_CAPSULE] = 0; if (Data->Year <= 59) { Data->P[plr].Probe[PROBE_HW_ORBITAL].Num++; Data->P[plr].Rocket[ROCKET_HW_ONE_STAGE].Num++; AIFuture(plr, Mission_Orbital_Satellite, 0, 0); } KeepRD(plr, 5); Data->P[plr].Buy[PROBE_HARDWARE][PROBE_HW_ORBITAL] = 0; Data->P[plr].Buy[ROCKET_HARDWARE][ROCKET_HW_ONE_STAGE] = 0; Data->P[plr].Buy[MANNED_HARDWARE][MANNED_HW_ONE_MAN_CAPSULE] = 0; RDafford(plr, MANNED_HARDWARE, MANNED_HW_ONE_MAN_CAPSULE); RDafford(plr, ROCKET_HARDWARE, ROCKET_HW_ONE_STAGE); if (Data->P[plr].AIStat < 2) { AIPur(plr); } prg[0] = 1; if (NoFail(plr) == 0) { if ((Data->Year == 59 && Data->Season == 1) || Data->Year >= 60) { switch (Data->P[plr].AIStrategy[AI_BEGINNING_STRATEGY]) { case 0: if (Data->P[plr].Manned[MISC_HW_EVA_SUITS].Safety > Data->P[plr].Manned[MISC_HW_EVA_SUITS].MaxRD - 20) { AIFuture(plr, Mission_Earth_Orbital_EVA, 0, (char *)&prg); } else { AIFuture(plr, Mission_SubOrbital, 0, (char *)&prg); } Data->P[plr].Manned[MANNED_HW_ONE_MAN_CAPSULE].Safety += 10; Data->P[plr].Manned[MISC_HW_EVA_SUITS].Safety += 10; ++Data->P[plr].AIStrategy[AI_BEGINNING_STRATEGY]; break; case 1: if (PrestigeCheck(plr, Prestige_MannedSpaceMission) == 0 && PrestigeCheck(other(plr), Prestige_MannedSpaceMission) == 0) { // && Data->P[plr].Manned[MANNED_HW_TWO_MAN_CAPSULE].Safety>Data->P[plr].Manned[MANNED_HW_TWO_MAN_CAPSULE].MaxRD-25) AIFuture(plr, Mission_SubOrbital, 0, (char *)&prg); } else if (PrestigeCheck(plr, Prestige_MannedOrbital) == 0 && PrestigeCheck(other(plr), Prestige_MannedOrbital) == 0) { // && Data->P[plr].Manned[MANNED_HW_TWO_MAN_CAPSULE].Safety>Data->P[plr].Manned[MANNED_HW_TWO_MAN_CAPSULE].MaxRD-25) AIFuture(plr, Mission_Earth_Orbital, 0, (char *)&prg); } else if (PrestigeCheck(plr, Prestige_MannedSpaceMission) == 0 && PrestigeCheck(other(plr), Prestige_MannedSpaceMission) == 1) { // && Data->P[plr].Manned[MANNED_HW_TWO_MAN_CAPSULE].Safety>Data->P[plr].Manned[MANNED_HW_TWO_MAN_CAPSULE].MaxRD-25) AIFuture(plr, Mission_Earth_Orbital, 0, (char *)&prg); } else if (PrestigeCheck(plr, Prestige_MannedOrbital) == 0 && PrestigeCheck(other(plr), Prestige_MannedOrbital) == 1) { // && Data->P[plr].Manned[MANNED_HW_TWO_MAN_CAPSULE].Safety>Data->P[plr].Manned[MANNED_HW_TWO_MAN_CAPSULE].MaxRD-25) AIFuture(plr, Mission_SubOrbital, 0, (char *)&prg); } ++Data->P[plr].AIStrategy[AI_BEGINNING_STRATEGY]; break; case 2: if (PrestigeCheck(plr, Prestige_MannedSpaceMission) == 0 && PrestigeCheck(other(plr), Prestige_MannedSpaceMission) == 0) { // && Data->P[plr].Manned[MANNED_HW_TWO_MAN_CAPSULE].Safety>Data->P[plr].Manned[MANNED_HW_TWO_MAN_CAPSULE].MaxRD-25) AIFuture(plr, Mission_SubOrbital, 0, (char *)&prg); } else if (PrestigeCheck(plr, Prestige_MannedOrbital) == 0 && PrestigeCheck(other(plr), Prestige_MannedOrbital) == 0) { // && Data->P[plr].Manned[MANNED_HW_TWO_MAN_CAPSULE].Safety>Data->P[plr].Manned[MANNED_HW_TWO_MAN_CAPSULE].MaxRD-25) AIFuture(plr, Mission_Earth_Orbital, 0, (char *)&prg); } else if (PrestigeCheck(plr, Prestige_MannedSpaceMission) == 0 && PrestigeCheck(other(plr), Prestige_MannedSpaceMission) == 1) { // && Data->P[plr].Manned[MANNED_HW_TWO_MAN_CAPSULE].Safety>Data->P[plr].Manned[MANNED_HW_TWO_MAN_CAPSULE].MaxRD-25) AIFuture(plr, Mission_Earth_Orbital, 0, (char *)&prg); } else if (PrestigeCheck(plr, Prestige_MannedOrbital) == 0 && PrestigeCheck(other(plr), Prestige_MannedOrbital) == 1) { // && Data->P[plr].Manned[MANNED_HW_TWO_MAN_CAPSULE].Safety>Data->P[plr].Manned[MANNED_HW_TWO_MAN_CAPSULE].MaxRD-25) AIFuture(plr, Mission_Earth_Orbital_EVA, 0, (char *)&prg); //2 } else { Data->P[plr].AIStat = 3; } ++Data->P[plr].AIStrategy[AI_BEGINNING_STRATEGY]; break; default: break; } if (Data->P[plr].Manned[MANNED_HW_ONE_MAN_CAPSULE].Num >= 2 && Data->P[plr].Rocket[ROCKET_HW_ONE_STAGE].Num >= 2) { if (Data->P[plr].Future[0].MissionCode == Mission_SubOrbital) { AIFuture(plr, Mission_Earth_Orbital, 1, (char *)&prg); } else if (Data->P[plr].Future[0].MissionCode == Mission_Earth_Orbital) { AIFuture(plr, Mission_SubOrbital, 1, (char *)&prg); } else if (Data->P[plr].Future[0].MissionCode == Mission_Earth_Orbital_EVA) { AIFuture(plr, Mission_Earth_Orbital, 1, (char *)&prg); } }; }; }; AILaunch(plr); } if (GenPur(plr, MISC_HARDWARE, MISC_HW_EVA_SUITS)) { RDafford(plr, MISC_HARDWARE, MISC_HW_EVA_SUITS); } else { RDafford(plr, MISC_HARDWARE, MISC_HW_EVA_SUITS); } Data->P[plr].Buy[MISC_HARDWARE][MISC_HW_EVA_SUITS] = 0; RDafford(plr, MISC_HARDWARE, MISC_HW_EVA_SUITS); if (Data->P[plr].AIStat >= 2) { CheckVoting(plr); // gets AIPrim,AISec,AILunar if (Data->P[plr].AIPrim == 0) { ProgramVoting(plr); } } // primary/secondary programs if (Data->P[plr].AIPrim == 8) { Data->P[plr].AIPrim = 6; Data->P[plr].AISec = 8; } if (Data->P[plr].AIPrim == 6) { Data->P[plr].AISec = 8; } if (Data->P[plr].AIPrim == 9) { Data->P[plr].AIPrim = 6; Data->P[plr].AISec = 9; } if (Data->P[plr].AILunar == 4) { Data->P[plr].AIPrim = 6; Data->P[plr].AISec = (Data->P[plr].Manned[MANNED_HW_TWO_MAN_CAPSULE].Safety >= Data->P[plr].Manned[MANNED_HW_FOUR_MAN_CAPSULE].Safety) ? 6 : 10; } // boosters if (Data->P[plr].AIStat >= 2) { if (GenPur(plr, ROCKET_HARDWARE, ROCKET_HW_BOOSTERS)) { RDafford(plr, ROCKET_HARDWARE, ROCKET_HW_BOOSTERS); } else { RDafford(plr, ROCKET_HARDWARE, ROCKET_HW_BOOSTERS); } } if (CheckSafety(plr, Data->P[plr].AIPrim) >= CheckSafety(plr, Data->P[plr].AISec)) { KeepRD(plr, Data->P[plr].AIPrim); } else { KeepRD(plr, Data->P[plr].AISec); } // larger rocket klugge if (Data->P[plr].AIStrategy[AI_LARGER_ROCKET_STRATEGY] == 1) { if (Level_Check != 0) { Data->P[plr].Cash += 25; // temporary } if (Data->P[plr].AILunar < 4) { if (GenPur(plr, ROCKET_HARDWARE, ROCKET_HW_THREE_STAGE)) { RDafford(plr, ROCKET_HARDWARE, ROCKET_HW_THREE_STAGE); } else { RDafford(plr, ROCKET_HARDWARE, ROCKET_HW_THREE_STAGE); } Data->P[plr].Buy[ROCKET_HARDWARE][ROCKET_HW_THREE_STAGE] = 0; RDafford(plr, ROCKET_HARDWARE, ROCKET_HW_THREE_STAGE); } else { if (Level_Check != 0) { Data->P[plr].Cash += 25; } if (GenPur(plr, ROCKET_HARDWARE, ROCKET_HW_MEGA_STAGE)) { RDafford(plr, ROCKET_HARDWARE, ROCKET_HW_MEGA_STAGE); } else { RDafford(plr, ROCKET_HARDWARE, ROCKET_HW_MEGA_STAGE); } Data->P[plr].Buy[ROCKET_HARDWARE][ROCKET_HW_MEGA_STAGE] = 0; RDafford(plr, ROCKET_HARDWARE, ROCKET_HW_MEGA_STAGE); } } if (Data->Year >= 62) if (Data->P[plr].AIStrategy[AI_LUNAR_MODULE] < 5) { PickModule(plr); } if (Data->P[plr].AILunar > 0 && Data->P[plr].AILunar < 4) { if (Data->P[plr].AIStrategy[AI_LUNAR_MODULE] > 0) { if (GenPur(plr, MANNED_HARDWARE, Data->P[plr].AIStrategy[AI_LUNAR_MODULE])) { RDafford(plr, MANNED_HARDWARE, Data->P[plr].AIStrategy[AI_LUNAR_MODULE]); } else { RDafford(plr, MANNED_HARDWARE, Data->P[plr].AIStrategy[AI_LUNAR_MODULE]); } Data->P[plr].Buy[MANNED_HARDWARE][Data->P[plr].AIStrategy[AI_LUNAR_MODULE]] = 0; RDafford(plr, MANNED_HARDWARE, Data->P[plr].AIStrategy[AI_LUNAR_MODULE]); } } for (i = 0; i < 3; i++) if (Data->P[plr].LaunchFacility[i] > 1) if (Data->P[plr].LaunchFacility[i] <= Data->P[plr].Cash) { Data->P[plr].Cash -= Data->P[plr].LaunchFacility[i]; Data->P[plr].LaunchFacility[i] = 1; } Data->P[plr].LaunchFacility[0] = 1; Data->P[plr].LaunchFacility[1] = 1; Data->P[plr].LaunchFacility[2] = 1; if (Data->P[plr].AIStat == 3) { switch (Data->P[plr].AILunar) { case 1: MoonProgram(plr, 1); break; case 2: MoonProgram(plr, 2); break; case 3: MoonProgram(plr, 3); break; case 4: MoonProgram(plr, 4); if (GenPur(plr, ROCKET_HARDWARE, ROCKET_HW_MEGA_STAGE)) { RDafford(plr, ROCKET_HARDWARE, ROCKET_HW_MEGA_STAGE); } RDafford(plr, ROCKET_HARDWARE, ROCKET_HW_MEGA_STAGE); break; default: break; } } if (Data->P[plr].AIStat >= 2 && Data->Year >= 61 && Data->P[plr].AIStrategy[AI_END_STAGE_LOCATION] >= 2) { if ((Data->P[plr].Probe[PROBE_HW_ORBITAL].Safety >= Data->P[plr].Probe[PROBE_HW_ORBITAL].MaxRD - 20) || Data->P[plr].Probe[PROBE_HW_INTERPLANETARY].Num >= 0) { Data->P[plr].Cash += Data->P[plr].Probe[PROBE_HW_INTERPLANETARY].InitCost + 30; if (Data->P[plr].Probe[PROBE_HW_INTERPLANETARY].Num <= 0) { if (GenPur(plr, PROBE_HARDWARE, PROBE_HW_INTERPLANETARY)) { RDafford(plr, PROBE_HARDWARE, PROBE_HW_INTERPLANETARY); } else { RDafford(plr, PROBE_HARDWARE, PROBE_HW_INTERPLANETARY); } } Data->P[plr].Buy[PROBE_HARDWARE][PROBE_HW_INTERPLANETARY] = 0; RDafford(plr, PROBE_HARDWARE, PROBE_HW_INTERPLANETARY); } if ((Data->P[plr].Probe[PROBE_HW_INTERPLANETARY].Safety >= Data->P[plr].Probe[PROBE_HW_INTERPLANETARY].MaxRD - 20) || Data->P[plr].Probe[PROBE_HW_LUNAR].Num >= 0) { Data->P[plr].Cash += Data->P[plr].Probe[PROBE_HW_LUNAR].InitCost + 30; if (Data->P[plr].Probe[PROBE_HW_LUNAR].Num <= 0) { if (GenPur(plr, PROBE_HARDWARE, PROBE_HW_LUNAR)) { RDafford(plr, PROBE_HARDWARE, PROBE_HW_LUNAR); } else { RDafford(plr, PROBE_HARDWARE, PROBE_HW_LUNAR); } } Data->P[plr].Buy[PROBE_HARDWARE][PROBE_HW_LUNAR] = 0; RDafford(plr, PROBE_HARDWARE, PROBE_HW_LUNAR); } if (GenPur(plr, ROCKET_HARDWARE, ROCKET_HW_TWO_STAGE)) { RDafford(plr, ROCKET_HARDWARE, ROCKET_HW_TWO_STAGE); } else { RDafford(plr, ROCKET_HARDWARE, ROCKET_HW_TWO_STAGE); } } if (PrestigeCheck(plr, Prestige_MannedSpaceMission) || PrestigeCheck(plr, Prestige_MannedOrbital)) { Data->P[plr].AIStat = 3; } // **** end stages *** if (Data->P[plr].AIStat == 3) { if (Data->P[plr].AILunar < 4) { if (CheckSafety(plr, Data->P[plr].AIPrim) > CheckSafety(plr, Data->P[plr].AISec)) { val = Data->P[plr].AIPrim; } else { val = Data->P[plr].AISec; } if (val < 7) { val = val - 4; } else { val = val - 5; } if (Data->P[plr].Manned[val - 1].Safety >= Data->P[plr].Manned[val - 1].MaxRD - 15) { NewAI(plr, val); } } else if (Data->P[plr].AILunar == 4) { if (Data->P[plr].Manned[MANNED_HW_FOUR_MAN_CAPSULE].Safety >= Data->P[plr].Manned[MANNED_HW_FOUR_MAN_CAPSULE].MaxRD - 10) { Data->P[plr].AISec = 10; } else { Data->P[plr].AISec = 6; } if (CheckSafety(plr, Data->P[plr].AIPrim) > CheckSafety(plr, Data->P[plr].AISec)) { val = Data->P[plr].AIPrim; } else { val = Data->P[plr].AISec; } if (val < 7) { val = val - 4; } else { val = val - 5; } if (Data->P[plr].Manned[val - 1].Safety >= Data->P[plr].Manned[val - 1].MaxRD - 15) { NewAI(plr, val); } else { Data->P[plr].Probe[PROBE_HW_ORBITAL].Num += 2; Data->P[plr].Rocket[ROCKET_HW_ONE_STAGE].Num += 2; AIFuture(plr, Mission_Orbital_Satellite, 0, 0); AIFuture(plr, Mission_Orbital_Satellite, 1, 0); AIFuture(plr, Mission_Orbital_Satellite, 2, 0); } } if (CheckSafety(plr, Data->P[plr].AIPrim) > CheckSafety(plr, Data->P[plr].AISec)) { val = Data->P[plr].AIPrim; if (val < 7) { val = val - 4; } else { val = val - 5; } if (CheckSafety(plr, Data->P[plr].AIPrim) > Data->P[plr].Manned[val - 1].MaxRD - 10) if (Data->P[plr].Manned[val - 1].Num >= 1) { KeepRD(plr, Data->P[plr].AISec); } } else { val = Data->P[plr].AISec; if (val < 7) { val = val - 4; } else { val = val - 5; } if (CheckSafety(plr, Data->P[plr].AISec) > Data->P[plr].Manned[val - 1].MaxRD - 10) if (Data->P[plr].Manned[val - 1].Num >= 1) { KeepRD(plr, Data->P[plr].AIPrim); } } } RDPrograms(plr); return; }