Files
source/Strategic/strategicmap.h
T
rftr 4689369f83 adjusted AI SAM site repairs:
- SAM sites are no longer repaired instantly when AI takes control of a sector
- repairs begin 24 hours after the AI takes control, and repeat every 24 hours until the SAM is back at 100%
- repairs can be interrupted by the player regaining control of the SAM site
- time to repair a fully-destroyed SAM site depends on difficulty: novice takes 5 repair cycles, experienced takes 4, expert 3, and insane 2
- moved RepairSamSite() from ASD.h (where it was unused) into strategicmap.h
- this sets up the existing but previously unused strategic event hook EVENT_SAMSITE_REPAIRED

git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@9349 3b4a5df2-a311-0410-b5c6-a8a6f20db521
2022-03-26 21:44:43 +00:00

238 lines
8.4 KiB
C

#ifndef __STRATMAP_H
#define __STRATMAP_H
// this file is for manipulation of the strategic map structure
#include "types.h"
#include "soldier control.h"
#include "FileMan.h"
#include "mapscreen.h"
//The maximum size for any team strategically speaking. For example, we can't have more than 20 enemies, militia, or creatures at a time.
//#define MAX_STRATEGIC_TEAM_SIZE 20
// Codes for jumoing into adjacent sectors..
enum
{
JUMP_ALL_LOAD_NEW,
JUMP_ALL_NO_LOAD,
JUMP_SINGLE_LOAD_NEW,
JUMP_SINGLE_NO_LOAD
};
enum{
CONTROLLED=0,
UNCONTROLLED,
};
// For speed, etc lets make these globals, forget the functions if you want
extern INT16 gWorldSectorX;
extern INT16 gWorldSectorY;
extern INT8 gbWorldSectorZ;
extern BOOLEAN gfHiddenTown [ MAX_TOWNS ];
extern BOOLEAN gfDrawHiddenTown [ MAX_TOWNS ];
extern BOOLEAN gfDrawHiddenTownTemp [ MAX_TOWNS ];
extern BOOLEAN gfHiddenTownTemp [ MAX_TOWNS ];
extern BOOLEAN gfIconTown [ MAX_TOWNS ];
extern BOOLEAN gfIconTownTemp [ MAX_TOWNS ];
// SAM definitions
extern UINT8 NUMBER_OF_SAMS;
#define MAX_NUMBER_OF_SAMS 50 //4 //50
extern INT16 pSamList[ MAX_NUMBER_OF_SAMS ];
extern INT32 pSamGridNoAList[ MAX_NUMBER_OF_SAMS ];
extern INT32 pSamGridNoBList[ MAX_NUMBER_OF_SAMS ];
extern INT16 gpSamSectorX[ MAX_NUMBER_OF_SAMS ];
extern INT16 gpSamSectorY[ MAX_NUMBER_OF_SAMS ];
extern BOOLEAN fFoundOrta;
extern BOOLEAN fSamSiteFound[ MAX_NUMBER_OF_SAMS ];
extern BOOLEAN gfUseAlternateMap;
/* Buggler: used externalized gpSamSectorX[ MAX_NUMBER_OF_SAMS ] values instead of hardcoded ones
// SAM sites
#define SAM_1_X 2
#define SAM_2_X 15
#define SAM_3_X 8
#define SAM_4_X 4
#define SAM_1_Y 4
#define SAM_2_Y 4
#define SAM_3_Y 9
#define SAM_4_Y 14
*/
// min condition for sam site to be functional
#define MIN_CONDITION_FOR_SAM_SITE_TO_WORK 50 // Flugente: changed from 80 to 50
// FUNCTIONS FOR DERTERMINING GOOD SECTOR EXIT DATA
#define CHECK_DIR_X_DELTA ( WORLD_TILE_X * 4 )
#define CHECK_DIR_Y_DELTA ( WORLD_TILE_Y * 10 )
// get index into aray
#define CALCULATE_STRATEGIC_INDEX( x, y ) ( x + ( y * MAP_WORLD_X ) )
#define GET_X_FROM_STRATEGIC_INDEX( i ) ( i % MAP_WORLD_X )
#define GET_Y_FROM_STRATEGIC_INDEX( i ) ( i / MAP_WORLD_X )
#define INVALID_STRATEGIC_INDEX ( 0 )
// macros to convert between the 2 different sector numbering systems
#define SECTOR_INFO_TO_STRATEGIC_INDEX( i ) ( CALCULATE_STRATEGIC_INDEX ( SECTORX( i ), SECTORY( i ) ) )
#define STRATEGIC_INDEX_TO_SECTOR_INFO( i ) ( SECTOR( GET_X_FROM_STRATEGIC_INDEX( i ), GET_Y_FROM_STRATEGIC_INDEX( i ) ) )
#define AI_SAMSITE_REPAIR_EASY 20
#define AI_SAMSITE_REPAIR_MEDIUM 25
#define AI_SAMSITE_REPAIR_HARD 34
#define AI_SAMSITE_REPAIR_INSANE 50
// grab the town id value
UINT8 GetTownIdForSector( INT16 sMapX, INT16 sMapY );
void GetCurrentWorldSector( INT16 *psMapX, INT16 *psMapY );
BOOLEAN SetCurrentWorldSector( INT16 sMapX, INT16 sMapY, INT8 bMapZ );
BOOLEAN EnterSector( INT16 sSectorX, INT16 sSectorY, INT8 bSectorZ );
void UpdateMercsInSector( INT16 sSectorX, INT16 sSectorY, INT8 bSectorZ );
void UpdateMercInSector( SOLDIERTYPE *pSoldier, INT16 sSectorX, INT16 sSectorY, INT8 bSectorZ );
BOOLEAN ReadInMapStructure(STR fileName, BOOLEAN localizedVersion);
BOOLEAN ReadInStrategicMapSectorTownNames(STR fileName, BOOLEAN localizedVersion);
BOOLEAN WriteInStrategicMapSectorTownNames(STR fileName);
// get short sector name without town name
void GetShortSectorString( INT16 sMapX,INT16 sMapY, STR16 sString );
//NEW!
//Calculates the name of the sector based on the loaded sector values.
//Examples: A9
// A10_B1
// J9_B2_A ( >= BETAVERSION ) else J9_B2 (release equivalent)
void GetLoadedSectorString( STR16 pString );
// This will get an ID string like A9- OMERTA...
void GetSectorIDString( INT16 sSectorX, INT16 sSectorY, INT8 bSectorZ , STR16 zString, BOOLEAN fDetailed );
void GetMapFileName(INT16 sMapX,INT16 sMapY, INT8 bSectorZ, STR8 bString, BOOLEAN fUsePlaceholder, BOOLEAN fAddAlternateMapLetter );
// Called from within tactical.....
void JumpIntoAdjacentSector( UINT8 ubDirection, UINT8 ubJumpCode, INT32 sAdditionalData );//dnl ch56 151009
BOOLEAN CanGoToTacticalInSector( INT16 sX, INT16 sY, UINT8 ubZ );
extern UINT32 ubSAMControlledSectors[MAP_WORLD_Y][MAP_WORLD_X];
void UpdateAirspaceControl( void );
BOOLEAN DoesSamCoverSector( UINT8 usSam, UINT8 usSector, BOOLEAN* apSamIsWorking = NULL );
BOOLEAN IsThisSectorASAMSector( INT16 sSectorX, INT16 sSectorY, INT8 bSectorZ );
void RepairSamSite( UINT16 aSector );
// init sam sites
void InitializeSAMSites( void );
// get town sector size
UINT8 GetTownSectorSize( INT8 bTownId );
// get town sector size, that is under play control
UINT8 GetTownSectorsUnderControl( INT8 bTownId );
UINT16 GetTownWorkers(INT8 bTownId, UINT16& arusMax);
void AddTownWorkers( INT8 bTownId, INT16 asAdd );
// is this sector part of this town
BOOLEAN SectorIsPartOfTown( INT8 bTownId, INT16 sSectorX, INT16 sSectorY );
//BOOLEAN IsThereAnyOneInThisTown( UINT8 ubTownId );
BOOLEAN SoldierOKForSectorExit( SOLDIERTYPE * pSoldier, INT8 bExitDirection, INT32 usAdditionalData );//dnl ch56 151009
BOOLEAN OKForSectorExit( INT8 bExitDirection, INT32 usAdditionalData, UINT32 *puiTraverseTimeInMinutes );//dnl ch56 151009
void SetupNewStrategicGame( );
BOOLEAN LoadStrategicInfoFromSavedFile( HWFILE hFile );
BOOLEAN SaveStrategicInfoToSavedFile( HWFILE hFile );
void AllMercsHaveWalkedOffSector( );
void AdjustSoldierPathToGoOffEdge( SOLDIERTYPE *pSoldier, INT32 sEndGridNo, UINT8 ubTacticalDirection );
void AllMercsWalkedToExitGrid();
void PrepareLoadedSector();
#ifdef JA2UB
// no JA2 UB
#else
// handle for slay...no better place to really put this stuff
void HandleSlayDailyEvent( void );
#endif
void HandleQuestCodeOnSectorEntry( INT16 sNewSectorX, INT16 sNewSectorY, INT8 bNewSectorZ );
// handle a soldier leaving thier squad behind, this sets them up for mvt and potential rejoining of group
void HandleSoldierLeavingSectorByThemSelf( SOLDIERTYPE *pSoldier );
BOOLEAN CheckAndHandleUnloadingOfCurrentWorld();
// number of SAM sites under player control
INT32 GetNumberOfSAMSitesUnderPlayerControl( void );
// is there a FUNCTIONAL SAM site in this sector?
BOOLEAN IsThereAFunctionalSAMSiteInSector( INT16 sSectorX, INT16 sSectorY, INT8 bSectorZ );
BOOLEAN IsSectorDesert( INT16 sSectorX, INT16 sSectorY );
BOOLEAN IsSectorTropical( INT16 sSectorX, INT16 sSectorY ); // added by SANDRO
BOOLEAN IsSectorFarm( INT16 sSectorX, INT16 sSectorY ); // added by Flugente
BOOLEAN IsSectorRoad( INT16 sSectorX, INT16 sSectorY ); // added by Flugente
// sam site under players control?
INT32 SAMSitesUnderPlayerControl( INT16 sX, INT16 sY );
INT8 GetSAMIdFromSector( INT16 sSectorX, INT16 sSectorY, INT8 bSectorZ );
void SetSamHackStatus( INT16 sSectorX, INT16 sSectorY, INT8 sStatus );
void SetupProfileInsertionDataForSoldier( SOLDIERTYPE *pSoldier );
BOOLEAN HandlePotentialBringUpAutoresolveToFinishBattle( int pSectorX, int pSectorY, int pSectorZ );
// WANNE - BMP;
BOOLEAN MapExists( UINT8 * szFilename );
BOOLEAN EscapeDirectionIsValid( INT8 * pbDirection );
//Used for determining the type of error message that comes up when you can't traverse to
//an adjacent sector. THESE VALUES DO NOT NEED TO BE SAVED!
extern BOOLEAN gfInvalidTraversal;
extern BOOLEAN gfLoneEPCAttemptingTraversal;
extern BOOLEAN gfRobotWithoutControllerAttemptingTraversal;
extern UINT8 gubLoneMercAttemptingToAbandonEPCs;
extern INT8 gbPotentiallyAbandonedEPCSlotID;
extern INT8 gbGreenToElitePromotions;
extern INT8 gbGreenToRegPromotions;
extern INT8 gbRegToElitePromotions;
extern INT8 gbMilitiaPromotions;
#ifdef JA2UB
void BeginLoadScreen();
//ja25 UB
void HandleSectorSpecificModificatioToMap( INT16 sMapX, INT16 sMapY, INT8 bMapZ, BOOLEAN fLoadingSavedGame );
void HandleEmailBeingSentWhenEnteringSector( INT16 sMapX, INT16 sMapY, INT8 bMapZ, BOOLEAN fLaptopJustGotFixed );
#endif
// Flugente: militia movement: can we order militia reinforcements from( sSrcMapX, sSrcMapY ) to( sMapX, sMapY ) ?
BOOLEAN CanRequestMilitiaReinforcements( INT16 sMapX, INT16 sMapY, INT16 sSrcMapX, INT16 sSrcMapY );
// Bob: check and try to fix issues with squad and group assignment
UINT8 tryToRecoverSquadsAndMovementGroups(SOLDIERTYPE* pCharacter);
#endif