Files
source/TileEngine/Map Edgepoints.h
T
2021-03-11 20:41:44 +00:00

98 lines
4.4 KiB
C

#ifndef __MAP_EDGEPOINTS_H
#define __MAP_EDGEPOINTS_H
#include "strategic.h"
typedef struct MAPEDGEPOINTINFO
{
UINT8 ubNumPoints;
UINT8 ubStrategicInsertionCode;
INT32 sGridNo[ LARGEST_NUMBER_IN_ANY_GROUP ];
}MAPEDGEPOINTINFO;
INT32 ChooseMapEdgepoint( UINT8 *ubStrategicInsertionCode, UINT8 lastValidICode );
void ChooseMapEdgepoints( MAPEDGEPOINTINFO *pMapEdgepointInfo, UINT8 ubStrategicInsertionCode, UINT8 ubNumDesiredPoints );
void GenerateMapEdgepoints(BOOLEAN fValidate=FALSE);
void SaveMapEdgepoints(HWFILE fp, FLOAT dMajorMapVersion, UINT8 ubMinorMapVersion);//dnl ch33 240909
BOOLEAN LoadMapEdgepoints( INT8 **hBuffer, FLOAT dMajorMapVersion );
void TrashMapEdgepoints();
//dynamic arrays that contain the valid gridno's for each edge
extern INT32 *gps1stNorthEdgepointArray;
extern INT32 *gps1stEastEdgepointArray;
extern INT32 *gps1stSouthEdgepointArray;
extern INT32 *gps1stWestEdgepointArray;
// WANNE - MP: Center
extern INT32 *gps1stCenterEdgepointArray;
extern UINT16 gus1stCenterEdgepointArraySize;
//contains the size for each array
extern UINT16 gus1stNorthEdgepointArraySize;
extern UINT16 gus1stEastEdgepointArraySize;
extern UINT16 gus1stSouthEdgepointArraySize;
extern UINT16 gus1stWestEdgepointArraySize;
//contains the index value for the first array index of the second row of each edgepoint array.
//Because each edgepoint side has two rows, the outside most row is calculated first, then the inside row.
//For purposes of AI, it may become necessary to avoid this.
extern UINT16 gus1stNorthEdgepointMiddleIndex;
extern UINT16 gus1stEastEdgepointMiddleIndex;
extern UINT16 gus1stSouthEdgepointMiddleIndex;
extern UINT16 gus1stWestEdgepointMiddleIndex;
//dynamic arrays that contain the valid gridno's for each edge
extern INT32 *gps2ndNorthEdgepointArray;
extern INT32 *gps2ndEastEdgepointArray;
extern INT32 *gps2ndSouthEdgepointArray;
extern INT32 *gps2ndWestEdgepointArray;
//contains the size for each array
extern UINT16 gus2ndNorthEdgepointArraySize;
extern UINT16 gus2ndEastEdgepointArraySize;
extern UINT16 gus2ndSouthEdgepointArraySize;
extern UINT16 gus2ndWestEdgepointArraySize;
//contains the index value for the first array index of the second row of each edgepoint array.
//Because each edgepoint side has two rows, the outside most row is calculated first, then the inside row.
//For purposes of AI, it may become necessary to avoid this.
extern UINT16 gus2ndNorthEdgepointMiddleIndex;
extern UINT16 gus2ndEastEdgepointMiddleIndex;
extern UINT16 gus2ndSouthEdgepointMiddleIndex;
extern UINT16 gus2ndWestEdgepointMiddleIndex;
//This is the search code that will determine the closest map edgepoint to a given gridno and
//a strategic insertion code. You must call the begin...() first, the call SearchForClosestMapEdgepoint()
//for each soldier that is looking. After you are completely finished, call the end..(). The return value
//will return NOWHERE if the information is invalid (no edgepoint info for that particular side, or all
//spots are reserved. There are only 20 spots that can be reserved (one for each player soldier). This
//code shouldn't be used for enemies or anybody else.
void BeginMapEdgepointSearch();
void EndMapEdgepointSearch();
INT32 SearchForClosestPrimaryMapEdgepoint( INT32 sGridNo, UINT8 ubInsertionCode, UINT8 defaultICode = INSERTION_CODE_GRIDNO, UINT8 *storedICode = NULL );
INT32 SearchForClosestSecondaryMapEdgepoint( INT32 sGridNo, UINT8 ubInsertionCode );
//There are two classes of edgepoints.
//PRIMARY : The default list of edgepoints. This list includes edgepoints that are easily accessible from the
// strategic level.
//SECONDARY : The isolated list of edgepoints. Certain areas of the game are blocked off, but tactically traversing
// to these areas is possible. Examples would be isolated sections of Grumm or Alma, which you can't
// immediately
//
UINT8 CalcMapEdgepointClassInsertionCode( INT32 sGridNo );
#ifdef JA2EDITOR
void ShowMapEdgepoints();
void HideMapEdgepoints();
#endif
// Flugente: hardcoded values are bad bad BAD
#define CENTERENTRYPTS_LEFT_X 250
#define CENTERENTRYPTS_RIGHT_X (634 - CENTERENTRYPTS_LEFT_X)
#define CENTERENTRYPTS_TOP_Y 130
#define CENTERENTRYPTS_BOTTOM_Y (320 - CENTERENTRYPTS_TOP_Y)
#define AIRDROPENTRYPTS_LEFT_X 0
#define AIRDROPENTRYPTS_RIGHT_X (634 - AIRDROPENTRYPTS_LEFT_X)
#define AIRDROPENTRYPTS_TOP_Y 0
#define AIRDROPENTRYPTS_BOTTOM_Y (320 - AIRDROPENTRYPTS_TOP_Y)
#endif