diff --git a/GameSettings.cpp b/GameSettings.cpp index fe0cbb5fb..2c5f1b3ed 100644 --- a/GameSettings.cpp +++ b/GameSettings.cpp @@ -2664,6 +2664,7 @@ void LoadModSettings(){ gModSettings.ubKingpinHouseSectorZ = iniReader.ReadInteger("San Mona", "KINGPIN_HOUSE_SECTOR_Z", 0); gModSettings.usKingpinRoomRangeStart = iniReader.ReadInteger("San Mona", "FIRST_ROOM_IN_KINGPIN_HOUSE", 30); gModSettings.usKingpinRoomRangeEnd = iniReader.ReadInteger("San Mona", "LAST_ROOM_IN_KINGPIN_HOUSE", 39); + gModSettings.iKingpinRingTile = iniReader.ReadInteger("San Mona", "KINGPIN_RING_TILE", 10763); gModSettings.ubKingpinMoneySectorX = iniReader.ReadInteger("San Mona", "KINGPIN_MONEY_SECTOR_X", 5); gModSettings.ubKingpinMoneySectorY = iniReader.ReadInteger("San Mona", "KINGPIN_MONEY_SECTOR_Y", 4); diff --git a/GameSettings.h b/GameSettings.h index 3a07a73af..e848d87be 100644 --- a/GameSettings.h +++ b/GameSettings.h @@ -2065,6 +2065,7 @@ typedef struct UINT8 ubKingpinHouseSectorZ; UINT16 usKingpinRoomRangeStart; UINT16 usKingpinRoomRangeEnd; + INT32 iKingpinRingTile; //Kingpin Private Stash UINT8 ubKingpinMoneySectorX; diff --git a/Strategic/Quests.cpp b/Strategic/Quests.cpp index 296a1f8f6..c609b2e85 100644 --- a/Strategic/Quests.cpp +++ b/Strategic/Quests.cpp @@ -1135,7 +1135,7 @@ BOOLEAN CheckFact( UINT16 usFact, UINT8 ubProfileID ) break; case FACT_KINGPIN_NOT_IN_OFFICE: - gubFact[usFact] = !( gWorldSectorX == 5 && gWorldSectorY == MAP_ROW_D && NPCInRoomRange( KINGPIN, 30, 39 ) ); + gubFact[usFact] = !( gWorldSectorX == gModSettings.ubKingpinHouseSectorX && gWorldSectorY == gModSettings.ubKingpinHouseSectorY && NPCInRoomRange( KINGPIN, gModSettings.usKingpinRoomRangeStart, gModSettings.usKingpinRoomRangeEnd ) ); // 30 to 39 break; @@ -1145,7 +1145,14 @@ BOOLEAN CheckFact( UINT16 usFact, UINT8 ubProfileID ) case FACT_NO_CLUB_FIGHTING_ALLOWED: // anv: added !BoxersAvailable, otherwise van Haussen would offer fight even when all boxers are dead - gubFact[usFact] = ( gubQuest[ QUEST_KINGPIN_MONEY ] == QUESTINPROGRESS || gfBoxersResting || !BoxersAvailable() );// plus other conditions + // silversurfer: additional fix - the check below failed when we killed all boxers because BoxersAvailable() returns 0 in this case. + // Added additional check for Kingpins location so that the three initial fights can be completed. As soon as Kingpin is gone the original check will apply again. + SOLDIERTYPE * pKingpin; + pKingpin = FindSoldierByProfileID( KINGPIN, FALSE ); + if ( pKingpin ) + gubFact[usFact] = ( gubQuest[ QUEST_KINGPIN_MONEY ] == QUESTINPROGRESS || gfBoxersResting || ( !BoxersAvailable() && PythSpacesAway(pKingpin->sGridNo, gModSettings.iKingpinRingTile) > 2 ) );// plus other conditions + else + gubFact[usFact] = TRUE; break; case FACT_MADDOG_IS_SPEAKER: diff --git a/TacticalAI/AIUtils.cpp b/TacticalAI/AIUtils.cpp index 6a2ac03bb..fd8982656 100644 --- a/TacticalAI/AIUtils.cpp +++ b/TacticalAI/AIUtils.cpp @@ -966,6 +966,10 @@ INT32 ClosestReachableDisturbance(SOLDIERTYPE *pSoldier, UINT8 ubUnconsciousOK, continue; // next merc } + // silversurfer: ignore empty vehicles + if ( pOpp->ubWhatKindOfMercAmI == MERC_TYPE__VEHICLE && GetNumberInVehicle( pOpp->bVehicleID ) == 0 ) + continue; + pbPersOL = pSoldier->aiData.bOppList + pOpp->ubID; pbPublOL = gbPublicOpplist[pSoldier->bTeam] + pOpp->ubID; psLastLoc = gsLastKnownOppLoc[pSoldier->ubID] + pOpp->ubID;