1 #ifndef __MAPSCREEN_H
2 #define __MAPSCREEN_H
3 
4 #include "Button_System.h"
5 #include "MessageBoxScreen.h"
6 #include "ScreenIDs.h"
7 #include "Types.h"
8 #include <string_theory/string>
9 
10 struct OBJECTTYPE;
11 struct PathSt;
12 struct SOLDIERTYPE;
13 
14 
15 // Sector name identifiers
16 enum Towns
17 {
18 	BLANK_SECTOR=0,
19 	OMERTA,
20 	DRASSEN,
21 	ALMA,
22 	GRUMM,
23 	TIXA,
24 	CAMBRIA,
25 	SAN_MONA,
26 	ESTONI,
27 	ORTA,
28 	BALIME,
29 	MEDUNA,
30 	CHITZENA,
31 	NUM_TOWNS
32 };
33 
34 #define FIRST_TOWN	OMERTA
35 
36 
37 extern BOOLEAN fCharacterInfoPanelDirty;
38 extern BOOLEAN fTeamPanelDirty;
39 extern BOOLEAN fMapPanelDirty;
40 
41 extern BOOLEAN fMapInventoryItem;
42 extern BOOLEAN gfInConfirmMapMoveMode;
43 extern BOOLEAN gfInChangeArrivalSectorMode;
44 
45 extern BOOLEAN gfSkyriderEmptyHelpGiven;
46 
47 
48 void SetInfoChar(SOLDIERTYPE const*);
49 void EndMapScreen( BOOLEAN fDuringFade );
50 void ReBuildCharactersList( void );
51 
52 
53 void HandlePreloadOfMapGraphics(void);
54 void HandleRemovalOfPreLoadedMapGraphics( void );
55 
56 void ChangeSelectedMapSector( INT16 sMapX, INT16 sMapY, INT8 bMapZ );
57 
58 BOOLEAN CanExtendContractForSoldier(const SOLDIERTYPE* s);
59 
60 void TellPlayerWhyHeCantCompressTime( void );
61 
62 // the info character
63 extern INT8 bSelectedInfoChar;
64 
65 SOLDIERTYPE* GetSelectedInfoChar(void);
66 void ChangeSelectedInfoChar( INT8 bCharNumber, BOOLEAN fResetSelectedList );
67 
68 void MAPEndItemPointer(void);
69 
70 void CopyPathToAllSelectedCharacters(PathSt* pPath);
71 void CancelPathsOfAllSelectedCharacters(void);
72 
73 INT32 GetPathTravelTimeDuringPlotting(PathSt* pPath);
74 
75 void AbortMovementPlottingMode( void );
76 
77 BOOLEAN CanChangeSleepStatusForSoldier(const SOLDIERTYPE* s);
78 
79 bool MapCharacterHasAccessibleInventory(SOLDIERTYPE const&);
80 
81 ST::string GetMapscreenMercAssignmentString(SOLDIERTYPE const& s);
82 ST::string GetMapscreenMercLocationString(SOLDIERTYPE const& s);
83 ST::string GetMapscreenMercDestinationString(SOLDIERTYPE const& s);
84 ST::string GetMapscreenMercDepartureString(SOLDIERTYPE const& s, UINT8* text_colour);
85 
86 // mapscreen wrapper to init the item description box
87 void MAPInternalInitItemDescriptionBox(OBJECTTYPE* pObject, UINT8 ubStatusIndex, SOLDIERTYPE* pSoldier);
88 
89 // rebuild contract box this character
90 void RebuildContractBoxForMerc(const SOLDIERTYPE* s);
91 
92 void    InternalMAPBeginItemPointer(SOLDIERTYPE* pSoldier);
93 BOOLEAN ContinueDialogue(SOLDIERTYPE* pSoldier, BOOLEAN fDone);
94 BOOLEAN GetMouseMapXY(INT16* psMapWorldX, INT16* psMapWorldY);
95 void    EndConfirmMapMoveMode(void);
96 BOOLEAN CanDrawSectorCursor(void);
97 void    RememberPreviousPathForAllSelectedChars(void);
98 void    MapScreenDefaultOkBoxCallback(MessageBoxReturnValue);
99 void    SetUpCursorForStrategicMap(void);
100 void    DrawFace(void);
101 void DrawStringRight(const ST::string& str, UINT16 x, UINT16 y, UINT16 w, UINT16 h, SGPFont font);
102 
103 extern GUIButtonRef giMapInvDoneButton;
104 extern BOOLEAN      fInMapMode;
105 extern BOOLEAN      fReDrawFace;
106 extern BOOLEAN      fShowInventoryFlag;
107 extern BOOLEAN      fShowDescriptionFlag;
108 extern GUIButtonRef giMapContractButton;
109 extern GUIButtonRef giCharInfoButton[2];
110 extern BOOLEAN      fDrawCharacterList;
111 
112 // create/destroy inventory button as needed
113 void CreateDestroyMapInvButton(void);
114 
115 void     MapScreenInit(void);
116 ScreenID MapScreenHandle(void);
117 void     MapScreenShutdown(void);
118 
119 void LockMapScreenInterface(bool lock);
120 void MakeDialogueEventEnterMapScreen();
121 
122 void SetMapCursorItem();
123 
124 #define NAME_X                (STD_SCREEN_X + 11)
125 #define NAME_WIDTH            (STD_SCREEN_X + 62 - NAME_X)
126 #define ASSIGN_X              (STD_SCREEN_X + 67)
127 #define ASSIGN_WIDTH          (STD_SCREEN_X + 118 - ASSIGN_X)
128 #define SLEEP_X               (STD_SCREEN_X + 123)
129 #define SLEEP_WIDTH           (STD_SCREEN_X + 142 - SLEEP_X)
130 #define LOC_X                 (STD_SCREEN_X + 147)
131 #define LOC_WIDTH             (STD_SCREEN_X + 179 - LOC_X)
132 #define DEST_ETA_X            (STD_SCREEN_X + 184)
133 #define DEST_ETA_WIDTH        (STD_SCREEN_X + 217 - DEST_ETA_X)
134 #define TIME_REMAINING_X      (STD_SCREEN_X + 222)
135 #define TIME_REMAINING_WIDTH  (STD_SCREEN_X + 250 - TIME_REMAINING_X)
136 #define CLOCK_Y_START         (STD_SCREEN_Y + 298)
137 #define CLOCK_ETA_X           (STD_SCREEN_X + 463 - 15 + 6 + 30)
138 #define CLOCK_HOUR_X_START    (STD_SCREEN_X + 463 + 25 + 30)
139 #define CLOCK_MIN_X_START     (STD_SCREEN_X + 463 + 45 + 30)
140 
141 // contract
142 #define CONTRACT_X            (STD_SCREEN_X + 185)
143 #define CONTRACT_Y            (STD_SCREEN_Y + 50)
144 
145 // trash can
146 #define TRASH_CAN_X           (STD_SCREEN_X + 176)
147 #define TRASH_CAN_Y           (211 + PLAYER_INFO_Y)
148 #define TRASH_CAN_WIDTH       193 - 165
149 #define TRASH_CAN_HEIGHT      239 - 217
150 
151 #endif
152