#ifndef _INTERFACE_H #define _INTERFACE_H #include "handle UI.h" #include "mousesystem.h" #include "structure.h" #include "Assignments.h" // added by Flugente for the stat-enums #include #define MAX_UICOMPOSITES 4 enum { WALK_ICON, SNEAK_ICON, RUN_ICON, CRAWL_ICON, LOOK_ICON, ACTIONC_ICON, TALK_ICON, HAND_ICON, OPEN_DOOR_ICON, EXAMINE_DOOR_ICON, LOCKPICK_DOOR_ICON, BOOT_DOOR_ICON, UNTRAP_DOOR_ICON, USE_KEY_ICON, USE_KEYRING_ICON, EXPLOSIVE_DOOR_ICON, USE_CROWBAR_ICON, CANCEL_ICON, NUM_ICONS }; #define ACTIVATE_BUTTON 0 #define DEACTIVATE_BUTTON 1 #define ENABLE_BUTTON 2 #define DISABLE_BUTTON 3 #define UNLOAD_BUTTON 4 #define MAX_ENEMY_NAMES_CHARS 128 typedef struct { UINT16 uiIndex; // add BOOLEAN Hidden; //add } HIDDEN_NAMES_VALUES; extern HIDDEN_NAMES_VALUES zHiddenNames[500]; typedef struct { UINT16 uiIndex; BOOLEAN Enabled; UINT16 ExpLevel; UINT16 Stats; UINT16 StatsMin; UINT16 StatsMax; CHAR16 szCurRank[MAX_ENEMY_NAMES_CHARS]; } ENEMY_RANK_VALUES; extern ENEMY_RANK_VALUES zEnemyRank[20]; typedef struct { UINT16 uiIndex; // add BOOLEAN Enabled; //add UINT16 SectorX; //add UINT16 SectorY; //add CHAR16 szCurGroup[MAX_ENEMY_NAMES_CHARS]; } ENEMY_NAMES_VALUES; extern ENEMY_NAMES_VALUES zEnemyName[500]; typedef struct { UINT16 uiIndex; // add BOOLEAN Enabled; //add BOOLEAN Loyalty; BOOLEAN AddToBattle; BOOLEAN fCanBeCaptured; // Flugente: if TRUE, members of this faction can be captured INT8 bSide; // sevenfm: custom side for civ group BOOLEAN fCustomSide; // sevenfm: use custom side CHAR16 szCurGroup[MAX_ENEMY_NAMES_CHARS]; } CIV_NAMES_VALUES; extern CIV_NAMES_VALUES zCivGroupName[NUM_CIV_GROUPS]; // Flugente: soldier profiles typedef struct { UINT16 uiIndex; CHAR16 szName[MAX_ENEMY_NAMES_CHARS]; UINT8 uiBodyType; UINT8 uiHair; UINT8 uiSkin; UINT8 uiTrait[3]; UINT32 uiFlags; } SOLDIER_PROFILE_VALUES; #define NUM_SOLDIER_PROFILES 300 extern SOLDIER_PROFILE_VALUES zSoldierProfile[6][NUM_SOLDIER_PROFILES]; extern UINT16 num_found_soldier_profiles[6]; // the correct number is set on reading the xml extern UINT16 num_found_profiles; // a helper variable during reading xmls // Flugente: backgrounds // enums for backgrounds enum { // sector dependent AP modifiers BG_POLAR, // not used ingame (yet?) BG_DESERT, BG_SWAMP, BG_URBAN, BG_FOREST, BG_PLAINS, BG_RIVER, BG_TROPICAL, BG_COASTAL, BG_MOUNTAIN, // stat effectiveness modifiers BG_AGILITY, BG_DEXTERITY, BG_STRENGTH, BG_LEADERSHIP, BG_MARKSMANSHIP, BG_MECHANICAL, BG_EXPLOSIVE_ASSIGN, BG_MEDICAL, BG_WISDOM, // ap modifiers for non-sector related tasks BG_HEIGHT, BG_SWIMMING, BG_FORTIFY, BG_ARTILLERY, BG_INVENTORY, BG_AIRDROP, BG_ASSAULT, // travel speed modifiers BG_TRAVEL_FOOT, BG_TRAVEL_CAR, BG_TRAVEL_AIR, BG_TRAVEL_BOAT, // resistances BG_RESI_FEAR, BG_RESI_SUPPRESSION, BG_RESI_PHYSICAL, BG_RESI_ALCOHOL, BG_RESI_DISEASE, // various BG_PERC_INTERROGATION, BG_PERC_GUARD, BG_PERC_PRICES_GUNS, BG_PERC_PRICES, BG_PERC_CAPITULATION, BG_PERC_SPEED_RUNNING, BG_PERC_BANDAGING, BG_PERC_REGEN_ENERGY, BG_PERC_CARRYSTRENGTH, BG_PERC_FOOD, BG_PERC_WATER, BG_PERC_SLEEP, BG_PERC_DAMAGE_MELEE, BG_PERC_CTH_BLADE, BG_PERC_CAMO, BG_PERC_STEALTH, BG_PERC_CTH_MAX, BG_PERC_HEARING_NIGHT, BG_PERC_HEARING_DAY, BG_PERC_DISARM, BG_PERC_SAM_CTH, // approaches BG_PERC_APPROACH_FRIENDLY, BG_PERC_APPROACH_DIRECT, BG_PERC_APPROACH_THREATEN, BG_PERC_APPROACH_RECRUIT, // various BG_BONUS_BREACHINGCHARGE, BG_PERC_CTH_CREATURE, BG_PERC_INSURANCE, BG_PERC_SPOTTER, BG_PERC_DISEASE_DIAGNOSE, BG_PERC_DISEASE_TREAT, BG_TRACKER_ABILITY, BG_AMBUSH_RADIUS, BG_SNAKEDEFENSE, BG_DISLIKEBG, // dislike any other background that has the negative of this value set BG_SMOKERTYPE, // 0: doesnt care about smoking 1: will consume cigarettes, dislikes non-smokers 2: will refuse to smoke, dislikes smokers BG_CROUCHEDDEFENSE, // lowers enemy cth if they fire at us while we are crouched against cover in the direction the shots come from BG_FORTIFY_ASSIGNMENT, // modifies effectivity of 'FORTIFICATION' assignment BG_HACKERSKILL, // hacking skill from 0 to 100, > 0 means hacking is possible BG_BURIAL_ASSIGNMENT, // modifies effectivity of 'BURIAL' assignment BG_ADMINISTRATION_ASSIGNMENT, // modifies effectivity of 'ADMINISTRATION' assignment BG_EXPLORATION_ASSIGNMENT, // modifies effectivity of 'EXPLORATION' assignment BG_MAX, }; enum class BackgroundVectorTypes { BG_DRUGUSE_TYPES, BG_DRUGUSE_ITEMS, }; typedef struct { UINT16 uiIndex; CHAR16 szName[MAX_ENEMY_NAMES_CHARS]; // name of a background etc. CHAR16 szShortName[20]; // abbreviated name for laptop display CHAR16 szDescription[256]; // description of background, should explain the abilities UINT64 uiFlags; // this flagmask defines what special properties this background has (on/off behaviour) INT16 value[BG_MAX]; // property values std::map> valueVectors; // optional additional data } BACKGROUND_VALUES; #define NUM_BACKGROUND 500 extern BACKGROUND_VALUES zBackground[NUM_BACKGROUND]; extern UINT16 num_found_background; // the correct number is set on reading the xml // anv: enums for externalised taunts enum TAUNTPROPERTY{ // progress TAUNT_PROGRESS_LT, TAUNT_PROGRESS_GT, // taunting person's stats TAUNT_EXP_LEVEL_LT, TAUNT_EXP_LEVEL_GT, TAUNT_HEALTH_LT, TAUNT_HEALTH_GT, TAUNT_HEALTH_MAX_LT, TAUNT_HEALTH_MAX_GT, TAUNT_ENERGY_LT, TAUNT_ENERGY_GT, TAUNT_ENERGY_MAX_LT, TAUNT_ENERGY_MAX_GT, TAUNT_MORALE_LT, TAUNT_MORALE_GT, // enemy/milita profiles TAUNT_PROFILE_ADMIN, TAUNT_PROFILE_ARMY, TAUNT_PROFILE_ELITE, TAUNT_PROFILE_GREEN, TAUNT_PROFILE_REGULAR, TAUNT_PROFILE_VETERAN, // facts TAUNT_FACT_TRUE, TAUNT_FACT_FALSE, // taunt target's stats TAUNT_TARGET_TYPE, TAUNT_TARGET_EXP_LEVEL_LT, TAUNT_TARGET_EXP_LEVEL_GT, TAUNT_TARGET_HEALTH_LT, TAUNT_TARGET_HEALTH_GT, TAUNT_TARGET_HEALTH_MAX_LT, TAUNT_TARGET_HEALTH_MAX_GT, TAUNT_TARGET_ENERGY_LT, TAUNT_TARGET_ENERGY_GT, TAUNT_TARGET_ENERGY_MAX_LT, TAUNT_TARGET_ENERGY_MAX_GT, TAUNT_TARGET_MORALE_LT, TAUNT_TARGET_MORALE_GT, TAUNT_TARGET_APPEARANCE, // taunt target's profile TAUNT_TARGET_MERC_PROFILE, // which merc quote should be riposted TAUNT_RIPOSTE_QUOTE, TAUNT_MAX, }; typedef struct { UINT16 uiIndex; CHAR16 szText[320]; CHAR16 szCensoredText[320]; UINT64 uiFlags; UINT64 uiFlags2; INT16 value[TAUNT_MAX]; } TAUNT_VALUES; #define NUM_TAUNT 2048 extern TAUNT_VALUES zTaunt[NUM_TAUNT]; extern UINT16 num_found_taunt; // the correct number is set on reading the xml extern int INTERFACE_WIDTH; // 640 extern int INTERFACE_HEIGHT; // 120 extern int INV_INTERFACE_HEIGHT; // 140 extern int INTERFACE_START_X; extern int INTERFACE_START_Y; // ( SCREEN_HEIGHT - INTERFACE_HEIGHT ) extern int INV_INTERFACE_START_Y; // ( SCREEN_HEIGHT - INV_INTERFACE_HEIGHT ) // FLASH PORTRAIT CODES #define FLASH_PORTRAIT_STOP 0 #define FLASH_PORTRAIT_START 1 #define FLASH_PORTRAIT_WAITING 2 #define FLASH_PORTRAIT_DELAY 150 // FLASH PORTRAIT PALETTE IDS #define FLASH_PORTRAIT_NOSHADE 0 #define FLASH_PORTRAIT_STARTSHADE 1 #define FLASH_PORTRAIT_ENDSHADE 2 #define FLASH_PORTRAIT_DARKSHADE 3 #define FLASH_PORTRAIT_GRAYSHADE 4 #define FLASH_PORTRAIT_LITESHADE 5 // GLOBAL DEFINES FOR SOME UI FLAGS #define ARROWS_HIDE_UP 0x00000002 #define ARROWS_HIDE_DOWN 0x00000004 #define ARROWS_SHOW_UP_BESIDE 0x00000008 #define ARROWS_SHOW_DOWN_BESIDE 0x00000020 #define ARROWS_SHOW_UP_ABOVE_Y 0x00000040 #define ARROWS_SHOW_DOWN_BELOW_Y 0x00000080 #define ARROWS_SHOW_DOWN_BELOW_G 0x00000200 #define ARROWS_SHOW_DOWN_BELOW_YG 0x00000400 #define ARROWS_SHOW_DOWN_BELOW_GG 0x00000800 #define ARROWS_SHOW_UP_ABOVE_G 0x00002000 #define ARROWS_SHOW_UP_ABOVE_YG 0x00004000 #define ARROWS_SHOW_UP_ABOVE_GG 0x00008000 #define ARROWS_SHOW_UP_ABOVE_YY 0x00020000 #define ARROWS_SHOW_DOWN_BELOW_YY 0x00040000 #define ARROWS_SHOW_UP_ABOVE_CLIMB 0x00080000 #define ARROWS_SHOW_UP_ABOVE_CLIMB2 0x00400000 #define ARROWS_SHOW_UP_ABOVE_CLIMB3 0x00800000 #define ARROWS_SHOW_DOWN_CLIMB 0x02000000 #define ROOF_LEVEL_HEIGHT 50 #define LOCATEANDSELECT_MERC 1 #define LOCATE_MERC_ONCE 2 // Interface level enums enum { I_GROUND_LEVEL, I_ROOF_LEVEL, I_NUMLEVELS }; #define DRAW_RED_BAR 1 #define DRAW_BLUE_BAR 2 #define DRAW_ERASE_BAR 3 extern BOOLEAN gfSwitchPanel; extern BOOLEAN gfUIStanceDifferent; extern UINT8 gbNewPanel; extern UINT8 gubNewPanelParam; extern INT16 gsCurInterfacePanel; extern UINT32 guiRENDERBUFFER; extern UINT32 guiCLOSE; extern UINT32 guiDEAD; extern UINT32 guiHATCH; extern UINT32 guiINTEXT; extern UINT32 guiSILHOUETTE; extern UINT32 guiCOMPANEL; extern UINT32 guiCOMPANELB; extern UINT32 guiRADIO; extern UINT32 guiPORTRAITICONS; // Default JA2 portrait icons (+ additional headgear icons from legion) extern UINT32 guiASSIGNMENTICONS; // Flugente: icons for assignments extern UINT32 guiBURSTACCUM; extern UINT32 guiITEMPOINTERHATCHES; //legion //extern UINT32 guiPORTRAITICONS_NV; //legion: NV-Face Graphic //extern UINT32 guiPORTRAITICONS_GAS_MASK; //legion: GASMASK-Face Graphic // WANNE: Face gear for IMPs in additional file //extern UINT32 guiPORTRAITICONS_NV_IMP; //extern UINT32 guiPORTRAITICONS_GAS_MASK_IMP; extern MOUSE_REGION gViewportRegion; extern MOUSE_REGION gRadarRegion; extern MOUSE_REGION gBottomPanalRegion; #define MOVEMENT_MENU_LOOK 1 #define MOVEMENT_MENU_ACTIONC 2 #define MOVEMENT_MENU_HAND 3 #define MOVEMENT_MENU_TALK 4 #define MOVEMENT_MENU_RUN 5 #define MOVEMENT_MENU_WALK 6 #define MOVEMENT_MENU_SWAT 7 #define MOVEMENT_MENU_PRONE 8 #define DIRTYLEVEL0 0 #define DIRTYLEVEL1 1 #define DIRTYLEVEL2 2 typedef enum { SM_PANEL, TEAM_PANEL, NUM_UI_PANELS } InterfacePanelDefines; BOOLEAN InitializeTacticalPortraits( ); BOOLEAN InitializeFaceGearGraphics( ); BOOLEAN InitializeTacticalInterface( ); BOOLEAN ShutdownTacticalInterface( ); extern BOOLEAN fInterfacePanelDirty; extern BOOLEAN gfPausedTacticalRenderFlags; extern BOOLEAN gfPausedTacticalRenderInterfaceFlags; extern INT16 gsInterfaceLevel; extern BOOLEAN gfInMovementMenu; void PopupPositionMenu( UI_EVENT *pUIEvent ); void PopDownPositionMenu( ); void PopupMovementMenu( UI_EVENT *pUIEvent ); void PopDownMovementMenu( ); void RenderMovementMenu( ); void CancelMovementMenu( ); void PopDownOpenDoorMenu( ); void RenderOpenDoorMenu( ); BOOLEAN InitDoorOpenMenu( SOLDIERTYPE *pSoldier, STRUCTURE *pStructure, UINT8 ubDirection, BOOLEAN fClosingDoor ); BOOLEAN HandleOpenDoorMenu( ); void CancelOpenDoorMenu( ); void HandleInterfaceBackgrounds( ); void BeginOverlayMessage( UINT32 uiFont, STR16 pFontString, ... ); void EndOverlayMessage( ); void DrawSelectedUIAboveGuy( UINT16 usSoldierID ); // HEADROCK HAM 4: Draw the CTH indicator, using values grabbed from the global CTH array BOOLEAN DrawCTHIndicator(); void CreateCurrentTacticalPanelButtons( ); void RemoveCurrentTacticalPanelButtons( ); void SetCurrentTacticalPanelCurrentMerc( UINT8 ubID ); void SetCurrentInterfacePanel( UINT8 ubNewPanel ); BOOLEAN IsMercPortraitVisible( UINT8 ubSoldierID ); BOOLEAN InitializeCurrentPanel( ); void ShutdownCurrentPanel( ); void ClearInterface( ); void RestoreInterface( ); void RenderArrows( ); void EraseRenderArrows( ); void GetArrowsBackground( ); void HandleUpDownArrowBackgrounds( ); void EndDeadlockMsg( ); void HandleLocateSelectMerc( UINT8 ubID, INT8 bFlag ); void DirtyMercPanelInterface( SOLDIERTYPE *pSoldier, UINT8 ubDirtyLevel ); void EndUIMessage( ); void BeginUIMessage( STR16 pFontString, ... ); void InternalBeginUIMessage( BOOLEAN fUseSkullIcon, STR16 pFontString, ... ); // map screen version, for centering over the map area void BeginMapUIMessage( UINT8 fPosition, STR16 pFontString, ... ); extern UINT16 gusUIOldSelectedSoldier; extern INT32 giUIMessageOverlay; extern UINT32 guiUIMessageTime; enum MESSAGE_TYPES { NO_MESSAGE, COMPUTER_TURN_MESSAGE, COMPUTER_INTERRUPT_MESSAGE, PLAYER_INTERRUPT_MESSAGE, MILITIA_INTERRUPT_MESSAGE, AIR_RAID_TURN_MESSAGE, PLAYER_TURN_MESSAGE, } ; void HandleTopMessages( ); BOOLEAN AddTopMessage( UINT8 ubType, STR16 pzString ); BOOLEAN InTopMessageBarAnimation( ); void EndTopMessage( ); void PauseRT( BOOLEAN fPause ); void InitEnemyUIBar( UINT8 ubNumEnemies, UINT8 ubDoneEnemies ); STR16 GetSoldierHealthString( SOLDIERTYPE *pSoldier ); void GetLaunchItemParamsFromUI( ); void RenderAimCubeUI( ); void ResetAimCubeAI( ); void SetupAimCubeAI( ); void IncrementAimCubeUI( ); void EndAimCubeUI( ); void BeginAimCubeUI( SOLDIERTYPE *pSoldier, INT32 sGridNo, INT8 ubLevel, UINT8 bStartPower, INT8 bStartHeight ); BOOLEAN AimCubeUIClick( ); void ResetPhysicsTrajectoryUI( ); void SetupPhysicsTrajectoryUI( ); void EndPhysicsTrajectoryUI( ); void BeginPhysicsTrajectoryUI( INT32 sGridNo, INT8 bLevel, BOOLEAN fBadCTGT ); void InitPlayerUIBar( BOOLEAN fInterrupt ); void ToggleTacticalPanels( ); void DirtyTopMessage( ); void BeginMultiPurposeLocator( INT32 sGridNo, INT8 bLevel, BOOLEAN fSlideTo ); void HandleMultiPurposeLocator( ); void RenderTopmostMultiPurposeLocator( ); // sevenfm: draw lines in health bar void DrawBar( INT32 x, INT32 y, INT32 width, INT32 height, UINT16 color8, UINT16 color16, UINT8 *pDestBuf ); // draw health bar over enemy void DrawEnemyHealthBar( SOLDIERTYPE* pSoldier, INT32 sX, INT32 sY, UINT8 ubLines, INT32 iBarWidth, INT32 iBarHeight ); // Flugente: show enemy role BOOLEAN ShowSoldierRoleSymbol(SOLDIERTYPE* pSoldier); //sevenfm: draw additional info for NCTH indicator void DrawItemPic( INVTYPE *pItem, INT16 sX, INT16 sY ); void GetItemDimensions( INVTYPE *pItem, INT16 &sWidth, INT16 &sHeight ); BOOLEAN ShowExactInfo( SOLDIERTYPE* pSoldier, SOLDIERTYPE* pTargetSoldier ); void DrawNCTHCursorItemPics( INT16 sStartScreenX, INT16 sStartScreenY ); void GetEnemyInfoString( SOLDIERTYPE* pSelectedSoldier, SOLDIERTYPE* pTargetSoldier, BOOLEAN showExactInfo, CHAR16 *NameStr ); void ShowEnemyWeapon( INT16 sX, INT16 sY, SOLDIERTYPE* pTargetSoldier ); void ShowEnemyHealthBar( INT16 sX, INT16 sY, SOLDIERTYPE* pSoldier ); void NCTHImprovedAPColor( SOLDIERTYPE* pSoldier, OBJECTTYPE* pWeapon ); void NCTHDrawLaserDot( UINT16* ptrBuf, UINT32 uiPitch, INT16 sLeft, INT16 sTop, INT16 sRight, INT16 sBottom, INT16 sStartScreenX, INT16 sStartScreenY, FLOAT fLaserBonus, FLOAT fBrightnessModifier, FLOAT fEffectiveLaserRatio, FLOAT zOffset ); void NCTHCorrectMaxAperture( FLOAT& iAperture, FLOAT& iDistanceAperture, UINT16& usCApertureBar ); void NCTHDrawScopeModeIcon( SOLDIERTYPE *pSoldier, INT16 sNewX, INT16 sNewY ); void NCTHShowAimLevels( SOLDIERTYPE* pSoldier, INT16 curX, INT16 curY ); void NCTHShowMounted( SOLDIERTYPE* pSoldier, UINT16* ptrBuf, UINT32 uiPitch, INT16 sLeft, INT16 sTop, INT16 sRight, INT16 sBottom, INT16 sStartScreenX, INT16 sStartScreenY, INT16 zOffset ); // Flugente: check a profile for a background flag without using SOLDIERTYPE BOOLEAN HasBackgroundFlag( UINT8 usProfile, UINT64 aFlag ); INT16 GetBackgroundValue( UINT8 usProfile, UINT16 aNr ); #endif