#ifdef PRECOMPILEDHEADERS #include "Strategic All.h" #include "Language Defines.h" #include "HelpScreen.h" #include "GameSettings.h" #else #include "sgp.h" #include "jascreens.h" #include "laptop.h" #include "worlddef.h" #include "Soldier Control.h" #include "overhead.h" #include "fade screen.h" #include "gamescreen.h" #include "email.h" #include "Game Clock.h" #include "soldier profile.h" #include "strategicmap.h" #include "game init.h" #include "animation data.h" #include "finances.h" #include "soldier create.h" #include "Soldier Init List.h" #include "music control.h" #include "strategic.h" #include "history.h" #include "merc entering.h" #include "Squads.h" #include "Campaign Init.h" #include "Strategic Town Loyalty.h" #include "Strategic Mines.h" #include "gameloop.h" #include "Random.h" #include "Map Screen Interface.h" #include "Tactical Save.h" #include "Campaign Types.h" #include "Message.h" #include "Game Event Hook.h" #include "Strategic Movement.h" #include "Creature Spreading.h" #include "Quests.h" #include "Strategic AI.h" #include "sound control.h" #include "Laptopsave.h" #include "AimMembers.h" #include "dialogue control.h" #include "npc.h" #include "Init.h" #include "GameSettings.h" #include "opplist.h" #include "interface dialogue.h" #include "Map Screen Interface Border.h" #include "Map Screen Helicopter.h" #include "Vehicles.h" #include "Map Screen Interface Map.h" #include "PreBattle Interface.h" #include "Arms Dealer Init.h" #include "bobbyr.h" #include "helpscreen.h" #include "Air Raid.h" #include "Interface.h" #include "cheats.h" #include "Interface Panels.h" #endif #include "Vehicles.h" #include "text.h" #include "connect.h" class OBJECTTYPE; class SOLDIERTYPE; // Temp function void QuickSetupOfMercProfileItems( UINT32 uiCount, UINT8 ubProfileIndex ); BOOLEAN QuickGameMemberHireMerc( UINT8 ubCurrentSoldier ); extern UINT32 guiExitScreen; extern UINT32 uiMeanWhileFlags; extern BOOLEAN gfGamePaused; extern UNDERGROUND_SECTORINFO* FindUnderGroundSector( INT16 sMapX, INT16 sMapY, UINT8 bMapZ ); UINT8 gubScreenCount=0; void InitNPCs( void ) { MERCPROFILESTRUCT * pProfile; // add the pilot at a random location! pProfile = &(gMercProfiles[ SKYRIDER ]); switch( Random( 4 ) ) { case 0: pProfile->sSectorX = 15; pProfile->sSectorY = MAP_ROW_B; pProfile->bSectorZ = 0; break; case 1: pProfile->sSectorX = 14; pProfile->sSectorY = MAP_ROW_E; pProfile->bSectorZ = 0; break; case 2: pProfile->sSectorX = 12; pProfile->sSectorY = MAP_ROW_D; pProfile->bSectorZ = 0; break; case 3: pProfile->sSectorX = 16; pProfile->sSectorY = MAP_ROW_C; pProfile->bSectorZ = 0; break; default: AssertMsg(false, "Skyrider was not set up properly"); } #ifdef JA2TESTVERSION ScreenMsg( MSG_FONT_RED, MSG_DEBUG, L"Skyrider in %c %d", 'A' + pProfile->sSectorY - 1, pProfile->sSectorX ); #endif // use alternate map, with Skyrider's shack, in this sector SectorInfo[ SECTOR( pProfile->sSectorX, pProfile->sSectorY ) ].uiFlags |= SF_USE_ALTERNATE_MAP; // set up Madlab's secret lab (he'll be added when the meanwhile scene occurs) switch( Random( 4 ) ) { case 0: // use alternate map in this sector SectorInfo[ SECTOR( 7, MAP_ROW_H ) ].uiFlags |= SF_USE_ALTERNATE_MAP; break; case 1: SectorInfo[ SECTOR( 16, MAP_ROW_H ) ].uiFlags |= SF_USE_ALTERNATE_MAP; break; case 2: SectorInfo[ SECTOR( 11, MAP_ROW_I ) ].uiFlags |= SF_USE_ALTERNATE_MAP; break; case 3: SectorInfo[ SECTOR( 4, MAP_ROW_E ) ].uiFlags |= SF_USE_ALTERNATE_MAP; break; } // add Micky in random location pProfile = &(gMercProfiles[MICKY]); switch( Random( 5 ) ) { case 0: pProfile->sSectorX = 9; pProfile->sSectorY = MAP_ROW_G; pProfile->bSectorZ = 0; break; case 1: pProfile->sSectorX = 13; pProfile->sSectorY = MAP_ROW_D; pProfile->bSectorZ = 0; break; case 2: pProfile->sSectorX = 5; pProfile->sSectorY = MAP_ROW_C; pProfile->bSectorZ = 0; break; case 3: pProfile->sSectorX = 2; pProfile->sSectorY = MAP_ROW_H; pProfile->bSectorZ = 0; break; case 4: pProfile->sSectorX = 6; pProfile->sSectorY = MAP_ROW_C; pProfile->bSectorZ = 0; break; } #ifdef JA2TESTVERSION ScreenMsg( MSG_FONT_RED, MSG_DEBUG, L"%s in %c %d", pProfile->zNickname, 'A' + pProfile->sSectorY - 1, pProfile->sSectorX ); #endif // use alternate map in this sector //SectorInfo[ SECTOR( pProfile->sSectorX, pProfile->sSectorY ) ].uiFlags |= SF_USE_ALTERNATE_MAP; gfPlayerTeamSawJoey = FALSE; if ( gGameOptions.ubGameStyle == STYLE_SCIFI && gGameExternalOptions.fEnableCrepitus ) { // add Bob pProfile = &(gMercProfiles[BOB]); pProfile->sSectorX = 8; pProfile->sSectorY = MAP_ROW_F; pProfile->bSectorZ = 0; // add Gabby in random location pProfile = &(gMercProfiles[GABBY]); switch( Random( 2 ) ) { case 0: pProfile->sSectorX = 11; pProfile->sSectorY = MAP_ROW_H; pProfile->bSectorZ = 0; break; case 1: pProfile->sSectorX = 4; pProfile->sSectorY = MAP_ROW_I; pProfile->bSectorZ = 0; break; } #ifdef JA2TESTVERSION ScreenMsg( MSG_FONT_RED, MSG_DEBUG, L"%s in %c %d", pProfile->zNickname, 'A' + pProfile->sSectorY - 1, pProfile->sSectorX ); #endif // use alternate map in this sector SectorInfo[ SECTOR( pProfile->sSectorX, pProfile->sSectorY ) ].uiFlags |= SF_USE_ALTERNATE_MAP; } else { //not scifi, so use alternate map in Tixa's b1 level that doesn't have the stairs going down to the caves. UNDERGROUND_SECTORINFO *pSector; pSector = FindUnderGroundSector( 9, 10, 1 ); //j9_b1 if( pSector ) { pSector->uiFlags |= SF_USE_ALTERNATE_MAP; } } // init hospital variables giHospitalTempBalance = 0; giHospitalRefund = 0; gbHospitalPriceModifier = 0; // set up Devin so he will be placed ASAP gMercProfiles[ DEVIN ].bNPCData = 3; } void InitBloodCatSectors() { INT32 i; //Hard coded table of bloodcat populations. We don't have //access to the real population (if different) until we physically //load the map. If the real population is different, then an error //will be reported. for( i = 0; i < 255; i++ ) { SectorInfo[ i ].bBloodCats = -1; } SectorInfo[ SEC_A15 ].bBloodCatPlacements = 9; SectorInfo[ SEC_B4 ].bBloodCatPlacements = 9; SectorInfo[ SEC_B16 ].bBloodCatPlacements = 8; SectorInfo[ SEC_C3 ].bBloodCatPlacements = 12; SectorInfo[ SEC_C8 ].bBloodCatPlacements = 13; SectorInfo[ SEC_C11 ].bBloodCatPlacements = 7; SectorInfo[ SEC_D4 ].bBloodCatPlacements = 8; SectorInfo[ SEC_D9 ].bBloodCatPlacements = 12; SectorInfo[ SEC_E11 ].bBloodCatPlacements = 10; SectorInfo[ SEC_E13 ].bBloodCatPlacements = 14; SectorInfo[ SEC_F3 ].bBloodCatPlacements = 13; SectorInfo[ SEC_F5 ].bBloodCatPlacements = 7; SectorInfo[ SEC_F7 ].bBloodCatPlacements = 12; SectorInfo[ SEC_F12 ].bBloodCatPlacements = 9; SectorInfo[ SEC_F14 ].bBloodCatPlacements = 14; SectorInfo[ SEC_F15 ].bBloodCatPlacements = 8; SectorInfo[ SEC_G6 ].bBloodCatPlacements = 7; SectorInfo[ SEC_G10 ].bBloodCatPlacements = 12; SectorInfo[ SEC_G12 ].bBloodCatPlacements = 11; SectorInfo[ SEC_H5 ].bBloodCatPlacements = 9; SectorInfo[ SEC_I4 ].bBloodCatPlacements = 8; SectorInfo[ SEC_I15 ].bBloodCatPlacements = 8; SectorInfo[ SEC_J6 ].bBloodCatPlacements = 11; SectorInfo[ SEC_K3 ].bBloodCatPlacements = 12; SectorInfo[ SEC_K6 ].bBloodCatPlacements = 14; SectorInfo[ SEC_K10 ].bBloodCatPlacements = 12; SectorInfo[ SEC_K14 ].bBloodCatPlacements = 14; switch( gGameOptions.ubDifficultyLevel ) { case DIF_LEVEL_EASY: //50% SectorInfo[ SEC_I16 ].bBloodCatPlacements = 14; SectorInfo[ SEC_I16 ].bBloodCats = 14; SectorInfo[ SEC_N5 ].bBloodCatPlacements = 8; SectorInfo[ SEC_N5 ].bBloodCats = 8; break; case DIF_LEVEL_MEDIUM: //75% SectorInfo[ SEC_I16 ].bBloodCatPlacements = 19; SectorInfo[ SEC_I16 ].bBloodCats = 19; SectorInfo[ SEC_N5 ].bBloodCatPlacements = 10; SectorInfo[ SEC_N5 ].bBloodCats = 10; break; case DIF_LEVEL_HARD: //100% SectorInfo[ SEC_I16 ].bBloodCatPlacements = 26; SectorInfo[ SEC_I16 ].bBloodCats = 26; SectorInfo[ SEC_N5 ].bBloodCatPlacements = 12; SectorInfo[ SEC_N5 ].bBloodCats = 12; break; case DIF_LEVEL_INSANE: //150% SectorInfo[ SEC_I16 ].bBloodCatPlacements = 39; SectorInfo[ SEC_I16 ].bBloodCats = 39; SectorInfo[ SEC_N5 ].bBloodCatPlacements = 18; SectorInfo[ SEC_N5 ].bBloodCats = 18; break; } } void InitStrategicLayer( void ) { DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"InitStrategicLayer"); // Clear starategic layer! SetupNewStrategicGame(); InitQuestEngine(); //Setup a new campaign via the enemy perspective. InitNewCampaign(); // Init Squad Lists InitSquads(); // Init vehicles InitAllVehicles( ); // init town loyalty InitTownLoyalty(); // init the mine management system InitializeMines(); // initialize map screen flags InitMapScreenFlags(); // initialize NPCs, select alternate maps, etc InitNPCs(); // init Skyrider and his helicopter InitializeHelicopter(); //Clear out the vehicle list ClearOutVehicleList(); InitBloodCatSectors(); InitializeSAMSites(); // make Orta, Tixa, SAM sites not found InitMapSecrets(); // free up any leave list arrays that were left allocated ShutDownLeaveList( ); // re-set up leave list arrays for dismissed mercs InitLeaveList( ); // reset time compression mode to X0 (this will also pause it) SetGameTimeCompressionLevel( TIME_COMPRESS_X0 ); // select A9 Omerta as the initial selected sector ChangeSelectedMapSector( startingX, startingY, startingZ ); // Reset these flags or mapscreen could be disabled and cause major headache. fDisableDueToBattleRoster = FALSE; fDisableMapInterfaceDueToBattle = FALSE; DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"InitStrategicLayer done"); } void ShutdownStrategicLayer() { DeleteAllStrategicEvents(); RemoveAllGroups(); TrashUndergroundSectorInfo(); DeleteCreatureDirectives(); KillStrategicAI(); ClearTacticalMessageQueue(); } BOOLEAN InitNewGame( BOOLEAN fReset ) { INT32 iStartingCash; DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"InitNewGame"); // static fScreenCount = 0; if( fReset ) { gubScreenCount = 0; return( TRUE ); } // reset meanwhile flags uiMeanWhileFlags = 0; // Reset the selected soldier gusSelectedSoldier = NOBODY; // CHRISL: Init inventory DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"InitNewGame: set initial inventory coords"); if( gubScreenCount == 0 ) { if((UsingNewInventorySystem() == true)) { InitNewInventorySystem(); InitializeSMPanelCoordsNew(); InitializeInvPanelCoordsNew(); } else { InitOldInventorySystem(); InitializeSMPanelCoordsOld(); InitializeInvPanelCoordsOld(); } } DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"InitNewGame: loading merc profiles"); if( gubScreenCount == 0 ) { if( !LoadMercProfiles() ) return(FALSE); } DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"InitNewGame: init arms dealers"); //Initialize the Arms Dealers and Bobby Rays inventory if( gubScreenCount == 0 ) { //Init all the arms dealers inventory InitAllArmsDealers(); InitBobbyRayInventory(); } DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"InitNewGame: clearing messages"); // clear tactical ClearTacticalMessageQueue( ); // clear mapscreen messages if(!is_networked)FreeGlobalMessageList(); //hayden // IF our first time, go into laptop! if ( gubScreenCount == 0 ) { DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"InitNewGame: first time: init laptop"); //Init the laptop here InitLaptopAndLaptopScreens(); InitStrategicLayer(); // Set new game flag SetLaptopNewGameFlag( ); // this is for the "mercs climbing down from a rope" animation, NOT Skyrider!! ResetHeliSeats( ); if(!is_networked) { // Setup two new messages! AddPreReadEmail(OLD_ENRICO_1,OLD_ENRICO_1_LENGTH,MAIL_ENRICO, GetWorldTotalMin() ); AddPreReadEmail(OLD_ENRICO_2,OLD_ENRICO_2_LENGTH,MAIL_ENRICO, GetWorldTotalMin() ); AddPreReadEmail(RIS_REPORT,RIS_REPORT_LENGTH,RIS_EMAIL, GetWorldTotalMin() ); AddPreReadEmail(OLD_ENRICO_3,OLD_ENRICO_3_LENGTH,MAIL_ENRICO, GetWorldTotalMin() ); AddEmail(IMP_EMAIL_INTRO,IMP_EMAIL_INTRO_LENGTH,CHAR_PROFILE_SITE, GetWorldTotalMin(), -1); //AddEmail(ENRICO_CONGRATS,ENRICO_CONGRATS_LENGTH,MAIL_ENRICO, GetWorldTotalMin() ); if(gGameExternalOptions.fMercDayOne) { AddEmail(MERC_INTRO, MERC_INTRO_LENGTH, SPECK_FROM_MERC, GetWorldTotalMin( ), -1 ); } } // ATE: Set starting cash.... switch( gGameOptions.ubDifficultyLevel ) { case DIF_LEVEL_EASY: iStartingCash = gGameExternalOptions.iStartingCashNovice; //iStartingCash = 45000; break; case DIF_LEVEL_MEDIUM: iStartingCash = gGameExternalOptions.iStartingCashExperienced; //iStartingCash = 35000; break; case DIF_LEVEL_HARD: iStartingCash = gGameExternalOptions.iStartingCashExpert; //iStartingCash = 30000; break; case DIF_LEVEL_INSANE: iStartingCash = gGameExternalOptions.iStartingCashInsane; // iStartingCash = 15000; break; default: Assert(0); return( FALSE ); } // Setup initial money AddTransactionToPlayersBook( ANONYMOUS_DEPOSIT, 0, GetWorldTotalMin(), iStartingCash ); { UINT32 uiDaysTimeMercSiteAvailable = Random( 2 ) + 1; // schedule email for message from spec at 7am 3 days in the future AddFutureDayStrategicEvent( EVENT_DAY3_ADD_EMAIL_FROM_SPECK, 60*7, 0, uiDaysTimeMercSiteAvailable ); } #ifdef CRIPPLED_VERSION { UINT32 cnt; //loop through the first 20 AIM mercs and set them to be away for( cnt = 0; cnt < 20; cnt++) { gMercProfiles[ cnt ].bMercStatus = MERC_WORKING_ELSEWHERE; gMercProfiles[ cnt ].uiDayBecomesAvailable = 14; // 14 days should be ok considering crippled version only goes to day 7 } } //Add an event to check for the end of the crippled version AddEveryDayStrategicEvent( EVENT_CRIPPLED_VERSION_END_GAME_CHECK, 0, 0 ); #endif if(is_networked) { SetLaptopExitScreen( MAP_SCREEN ); //hayden SetPendingNewScreen( MAP_SCREEN ); ScreenMsg( MSG_FONT_WHITE, MSG_CHAT, L"------------------------------------------------------"); ScreenMsg( MSG_FONT_WHITE, MSG_CHAT, MPHelp[0]); ScreenMsg( MSG_FONT_WHITE, MSG_CHAT, L"------------------------------------------------------"); ScreenMsg( MSG_FONT_WHITE, MSG_CHAT, MPHelp[1]); } else { SetLaptopExitScreen( INIT_SCREEN ); SetPendingNewScreen(LAPTOP_SCREEN); } gubScreenCount = 1; //Set the fact the game is in progress gTacticalStatus.fHasAGameBeenStarted = TRUE; return( TRUE ); } /* if( ( guiExitScreen == MAP_SCREEN ) && ( LaptopSaveInfo.gfNewGameLaptop ) ) { SetLaptopExitScreen( GAME_SCREEN ); return( TRUE ); } */ if ( gubScreenCount == 1 ) { // OK , FADE HERE //BeginFade( INIT_SCREEN, 35, FADE_OUT_REALFADE, 5 ); //BeginFade( INIT_SCREEN, 35, FADE_OUT_VERSION_FASTER, 25 ); //BeginFade( INIT_SCREEN, 35, FADE_OUT_VERSION_SIDE, 0 ); gubScreenCount = 2; return( TRUE ); } /* if ( gubScreenCount == 2 ) { if ( !SetCurrentWorldSector( startingX, startingY, startingZ ) ) { } SetLaptopExitScreen( MAP_SCREEN ); FadeInGameScreen( ); EnterTacticalScreen( ); if( gfAtLeastOneMercWasHired == TRUE ) { gubScreenCount = 3; } else { } return( TRUE ); } */ DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"InitNewGame done"); return( TRUE ); } BOOLEAN AnyMercsHired( ) { INT32 cnt; SOLDIERTYPE *pTeamSoldier; INT16 bLastTeamID; // Find first guy availible in team cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID; bLastTeamID = gTacticalStatus.Team[ gbPlayerNum ].bLastID; // look for all mercs on the same team, for ( pTeamSoldier = MercPtrs[ cnt ]; cnt <= bLastTeamID; cnt++,pTeamSoldier++) { if ( pTeamSoldier->bActive ) { return( TRUE ); } } return( FALSE ); } void QuickStartGame( ) { INT32 cnt; UINT16 usVal; UINT8 ub1 = 0, ub2 = 0; for ( cnt = 0; cnt < 3; cnt++ ) { if ( cnt == 0 ) { usVal = (UINT16)Random( 40 ); QuickSetupOfMercProfileItems( cnt, (UINT8)usVal ); QuickGameMemberHireMerc( (UINT8)usVal ); } else if ( cnt == 1 ) { do { usVal = (UINT16)Random( 40 ); } while( usVal != ub1 ); QuickSetupOfMercProfileItems( cnt, (UINT8)usVal ); QuickGameMemberHireMerc( (UINT8)usVal ); } else if ( cnt == 2 ) { do { usVal = (UINT16)Random( 40 ); } while( usVal != ub1 && usVal != ub2 ); QuickSetupOfMercProfileItems( cnt, (UINT8)usVal ); QuickGameMemberHireMerc( (UINT8)usVal ); } } } // TEMP FUNCTION! void QuickSetupOfMercProfileItems( UINT32 uiCount, UINT8 ubProfileIndex ) { // Quickly give some guys we hire some items if ( uiCount == 0 ) { //CreateGun( GLOCK_17, &(pSoldier->inv[ HANDPOS ] ) ); //gMercProfiles[ ubProfileIndex ].inv[ HANDPOS ] = HAND_GRENADE; //gMercProfiles[ ubProfileIndex ].bInvStatus[ HANDPOS ] = 100; //gMercProfiles[ ubProfileIndex ].bInvNumber[ HANDPOS ] = 3; gMercProfiles[ ubProfileIndex ].inv[ HANDPOS ] = C7; gMercProfiles[ ubProfileIndex ].bInvStatus[ HANDPOS ] = 100; gMercProfiles[ ubProfileIndex ].bInvNumber[ HANDPOS ] = 1; gMercProfiles[ ubProfileIndex ].inv[ BIGPOCK1POS ] = CAWS; gMercProfiles[ ubProfileIndex ].bInvStatus[ BIGPOCK1POS ] = 100; gMercProfiles[ ubProfileIndex ].bInvNumber[ BIGPOCK1POS ] = 1; gMercProfiles[ ubProfileIndex ].bSkillTrait = MARTIALARTS; gMercProfiles[ ubProfileIndex ].inv[ SMALLPOCK3POS ] = KEY_2; gMercProfiles[ ubProfileIndex ].bInvStatus[ SMALLPOCK3POS ] = 100; gMercProfiles[ ubProfileIndex ].bInvNumber[ SMALLPOCK3POS ] = 1; gMercProfiles[ ubProfileIndex ].inv[ SMALLPOCK5POS ] = LOCKSMITHKIT; gMercProfiles[ ubProfileIndex ].bInvStatus[ SMALLPOCK5POS ] = 100; gMercProfiles[ ubProfileIndex ].bInvNumber[ SMALLPOCK5POS ] = 1; gMercProfiles[ ubProfileIndex ].inv[ BIGPOCK3POS ] = MEDICKIT; gMercProfiles[ ubProfileIndex ].bInvStatus[ BIGPOCK3POS ] = 100; gMercProfiles[ ubProfileIndex ].bInvNumber[ BIGPOCK3POS ] = 1; gMercProfiles[ ubProfileIndex ].inv[ BIGPOCK4POS ] = SHAPED_CHARGE; gMercProfiles[ ubProfileIndex ].bInvStatus[ BIGPOCK4POS ] = 100; gMercProfiles[ ubProfileIndex ].bInvNumber[ BIGPOCK4POS ] = 1; // TEMP! // make carman's opinion of us high! gMercProfiles[ 78 ].bMercOpinion[ ubProfileIndex ] = 25; } else if ( uiCount == 1 ) { gMercProfiles[ ubProfileIndex ].inv[ HANDPOS ] = CAWS; gMercProfiles[ ubProfileIndex ].bInvStatus[ HANDPOS ] = 100; gMercProfiles[ ubProfileIndex ].bInvNumber[ HANDPOS ] = 1; gMercProfiles[ ubProfileIndex ].inv[ SMALLPOCK3POS ] = KEY_1; gMercProfiles[ ubProfileIndex ].bInvStatus[ SMALLPOCK3POS ] = 100; gMercProfiles[ ubProfileIndex ].bInvNumber[ SMALLPOCK3POS ] = 1; } else if ( uiCount == 2 ) { gMercProfiles[ ubProfileIndex ].inv[ HANDPOS ] = GLOCK_17; gMercProfiles[ ubProfileIndex ].bInvStatus[ HANDPOS ] = 100; gMercProfiles[ ubProfileIndex ].bInvNumber[ HANDPOS ] = 1; gMercProfiles[ ubProfileIndex ].inv[ SECONDHANDPOS ] = 5; gMercProfiles[ ubProfileIndex ].bInvStatus[ SECONDHANDPOS ] = 100; gMercProfiles[ ubProfileIndex ].bInvNumber[ SECONDHANDPOS ] = 1; gMercProfiles[ ubProfileIndex ].inv[ SMALLPOCK1POS ] = SILENCER; gMercProfiles[ ubProfileIndex ].bInvStatus[ SMALLPOCK1POS ] = 100; gMercProfiles[ ubProfileIndex ].bInvNumber[ SMALLPOCK1POS ] = 1; gMercProfiles[ ubProfileIndex ].inv[ SMALLPOCK2POS ] = SNIPERSCOPE; gMercProfiles[ ubProfileIndex ].bInvStatus[ SMALLPOCK2POS ] = 100; gMercProfiles[ ubProfileIndex ].bInvNumber[ SMALLPOCK2POS ] = 1; gMercProfiles[ ubProfileIndex ].inv[ SMALLPOCK3POS ] = LASERSCOPE; gMercProfiles[ ubProfileIndex ].bInvStatus[ SMALLPOCK3POS ] = 100; gMercProfiles[ ubProfileIndex ].bInvNumber[ SMALLPOCK3POS ] = 1; gMercProfiles[ ubProfileIndex ].inv[ SMALLPOCK5POS ] = BIPOD; gMercProfiles[ ubProfileIndex ].bInvStatus[ SMALLPOCK5POS ] = 100; gMercProfiles[ ubProfileIndex ].bInvNumber[ SMALLPOCK5POS ] = 1; gMercProfiles[ ubProfileIndex ].inv[ SMALLPOCK6POS ] = LOCKSMITHKIT; gMercProfiles[ ubProfileIndex ].bInvStatus[ SMALLPOCK6POS ] = 100; gMercProfiles[ ubProfileIndex ].bInvNumber[ SMALLPOCK6POS ] = 1; } else { gMercProfiles[ ubProfileIndex ].inv[ HANDPOS ] = (UINT8)Random(30); gMercProfiles[ ubProfileIndex ].bInvNumber[ HANDPOS ] = 1; } gMercProfiles[ ubProfileIndex ].inv[ HELMETPOS ] = KEVLAR_HELMET; gMercProfiles[ ubProfileIndex ].bInvStatus[ HELMETPOS ] = 100; gMercProfiles[ ubProfileIndex ].bInvNumber[ HELMETPOS ] = 1; gMercProfiles[ ubProfileIndex ].inv[ VESTPOS ] = KEVLAR_VEST; gMercProfiles[ ubProfileIndex ].bInvStatus[ VESTPOS ] = 100; gMercProfiles[ ubProfileIndex ].bInvNumber[ VESTPOS ] = 1; gMercProfiles[ ubProfileIndex ].inv[ BIGPOCK2POS ] = RDX; gMercProfiles[ ubProfileIndex ].bInvStatus[ BIGPOCK2POS ] = 10; gMercProfiles[ ubProfileIndex ].bInvNumber[ BIGPOCK2POS ] = 1; gMercProfiles[ ubProfileIndex ].inv[ SMALLPOCK4POS ] = HAND_GRENADE; gMercProfiles[ ubProfileIndex ].bInvStatus[ SMALLPOCK4POS ] = 100; gMercProfiles[ ubProfileIndex ].bInvNumber[ SMALLPOCK4POS ] = 4; // Give special items to some NPCs //gMercProfiles[ 78 ].inv[ SMALLPOCK4POS ] = TERRORIST_INFO; //gMercProfiles[ 78 ].bInvStatus[ SMALLPOCK4POS ] = 100; //gMercProfiles[ 78 ].bInvNumber[ SMALLPOCK4POS ] = 1; } BOOLEAN QuickGameMemberHireMerc( UINT8 ubCurrentSoldier ) { MERC_HIRE_STRUCT HireMercStruct; memset(&HireMercStruct, 0, sizeof(MERC_HIRE_STRUCT)); HireMercStruct.ubProfileID = ubCurrentSoldier; HireMercStruct.sSectorX = gsMercArriveSectorX; HireMercStruct.sSectorY = gsMercArriveSectorY; HireMercStruct.fUseLandingZoneForArrival = TRUE; HireMercStruct.fCopyProfileItemsOver = TRUE; HireMercStruct.ubInsertionCode = INSERTION_CODE_CHOPPER; HireMercStruct.iTotalContractLength = 7; //specify when the merc should arrive HireMercStruct.uiTimeTillMercArrives = 0; //if we succesfully hired the merc if( !HireMerc( &HireMercStruct ) ) { return(FALSE); } //add an entry in the finacial page for the hiring of the merc AddTransactionToPlayersBook(HIRED_MERC, ubCurrentSoldier, GetWorldTotalMin(), -(INT32) gMercProfiles[ubCurrentSoldier].uiWeeklySalary ); if( gMercProfiles[ ubCurrentSoldier ].bMedicalDeposit ) { //add an entry in the finacial page for the medical deposit AddTransactionToPlayersBook(MEDICAL_DEPOSIT, ubCurrentSoldier, GetWorldTotalMin(), -(gMercProfiles[ubCurrentSoldier].sMedicalDepositAmount) ); } //add an entry in the history page for the hiring of the merc AddHistoryToPlayersLog( HISTORY_HIRED_MERC_FROM_AIM, ubCurrentSoldier, GetWorldTotalMin(), -1, -1 ); return(TRUE); } //This function is called when the game is REstarted. Things that need to be reinited are placed in here void ReStartingGame() { UINT16 cnt; //Pause the game gfGamePaused = TRUE; //Reset the sectors gWorldSectorX = gWorldSectorY = 0; gbWorldSectorZ = -1; SoundStopAll( ); //we are going to restart a game so initialize the variable so we can initialize a new game InitNewGame( TRUE ); //Deletes all the Temp files in the Maps\Temp directory InitTacticalSave( TRUE ); //Loop through all the soldier and delete them all for( cnt=0; cnt< TOTAL_SOLDIERS; cnt++) { TacticalRemoveSoldier( cnt ); } // Re-init overhead... InitOverhead( ); //Reset the email list ShutDownEmailList(); //Reinit the laptopn screen variables InitLaptopAndLaptopScreens(); LaptopScreenInit(); //Reload the Merc profiles LoadMercProfiles( ); // Reload quote files ReloadAllQuoteFiles(); //Initialize the ShopKeeper Interface ( arms dealer inventory, etc. ) ShopKeeperScreenInit(); //Delete the world info TrashWorld(); //Init the help screen system InitHelpScreenSystem(); EmptyDialogueQueue( ); if ( InAirRaid( ) ) { EndAirRaid( ); } #ifdef JA2TESTVERSION //Reset so we can use the 'cheat key' to start with mercs TempHiringOfMercs( 0, TRUE ); #endif //Make sure the game starts in the TEAM panel ( it wasnt being reset ) gsCurInterfacePanel = TEAM_PANEL; //Delete all the strategic events DeleteAllStrategicEvents(); //This function gets called when ur in a game a click the quit to main menu button, therefore no game is in progress gTacticalStatus.fHasAGameBeenStarted = FALSE; // Reset timer callbacks gpCustomizableTimerCallback = NULL; gubCheatLevel = STARTING_CHEAT_LEVEL; }