mirror of
https://github.com/1dot13/source.git
synced 2026-07-22 13:40:22 +02:00
- 'Ctrl+Tab' for next tab in Enhanced Description Box at Strategic & Tactical Screen ('Tab' also possible in Strategic Screen as previously not in used)
- 'M' for Multiplayer in Main Menu Screen
git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@5668 3b4a5df2-a311-0410-b5c6-a8a6f20db521
365 lines
14 KiB
C++
365 lines
14 KiB
C++
#ifndef __INTERFACE_ITEMS_H
|
|
#define __INTERFACE_ITEMS_H
|
|
|
|
#include "items.h"
|
|
#include "Handle Items.h"
|
|
#include "popup_class.h"
|
|
|
|
// DEFINES FOR ITEM SLOT SIZES IN PIXELS
|
|
#define BIG_INV_SLOT_WIDTH 61
|
|
#define BIG_INV_SLOT_HEIGHT 22
|
|
#define SM_INV_SLOT_WIDTH 30
|
|
#define SM_INV_SLOT_HEIGHT 23
|
|
#define ATTACH_SLOT_WIDTH 32
|
|
#define ATTACH_SLOT_BIG_WIDTH 64
|
|
#define VEST_INV_SLOT_WIDTH 43
|
|
#define VEST_INV_SLOT_HEIGHT 24
|
|
#define LEGS_INV_SLOT_WIDTH 43
|
|
#define LEGS_INV_SLOT_HEIGHT 24
|
|
#define HEAD_INV_SLOT_WIDTH 43
|
|
#define HEAD_INV_SLOT_HEIGHT 24
|
|
|
|
#define NUM_UDB_GEN_LINES 12
|
|
#define NUM_UDB_ADV_LINES 13 // Flugente FTW 1.1: 12->13
|
|
|
|
// HEADROCK HAM 4: These rectangle definitions are used in UDB to determine locations for icons, data, and tooltip
|
|
// regions. They replace the plethora of region data provided in EDB.
|
|
typedef struct
|
|
{
|
|
INT16 sLeft;
|
|
INT16 sTop;
|
|
INT16 sRight;
|
|
INT16 sBottom;
|
|
} INV_DESC_REGIONS;
|
|
|
|
extern INV_DESC_REGIONS gItemDescLBEBackground[4]; // Coordinates for displaying LBE background image
|
|
extern INV_DESC_REGIONS gItemDescGenHeaderRegions[3]; // Header text regions for various parts of the General Tab
|
|
extern INV_DESC_REGIONS gItemDescGenIndexRegions[3][4]; // Index text regions for various parts of the General Tab
|
|
extern INV_DESC_REGIONS gItemDescGenRegions[NUM_UDB_GEN_LINES * 2][4]; // Data regions, 4 sub-columns each
|
|
extern INV_DESC_REGIONS gItemDescGenSecondaryRegions[26]; // Secondary data regions, 3x5 for now (possible 3x6?)
|
|
extern INV_DESC_REGIONS gItemDescTextRegions[8]; // Main description regions
|
|
extern INV_DESC_REGIONS gItemDescAdvIndexRegions[1][4];
|
|
extern INV_DESC_REGIONS gItemDescAdvRegions[NUM_UDB_ADV_LINES][4]; // Advanced data regions, 4 sub-columns each
|
|
|
|
// ODB arrays
|
|
extern INV_DESC_REGIONS gODBItemDescRegions[4][8]; // Four regions of eight sub-regions each.
|
|
|
|
//CHRISL: moved from Interface Items.cpp
|
|
typedef struct
|
|
{
|
|
INT16 sX;
|
|
INT16 sY;
|
|
INT16 sValDx;
|
|
|
|
} INV_DESC_STATS;
|
|
typedef struct
|
|
{
|
|
INT16 sX;
|
|
INT16 sY;
|
|
INT16 sHeight;
|
|
INT16 sWidth;
|
|
INT16 sBarDx;
|
|
INT16 sBarDy;
|
|
|
|
} INV_ATTACHXY;
|
|
typedef struct
|
|
{
|
|
UINT32 uiTotalAmount;
|
|
UINT32 uiMoneyRemaining;
|
|
UINT32 uiMoneyRemoving;
|
|
|
|
} REMOVE_MONEY;
|
|
typedef struct
|
|
{
|
|
UINT16 x;
|
|
UINT16 y;
|
|
} MoneyLoc;
|
|
void ItemDescCallback( MOUSE_REGION * pRegion, INT32 iReason );
|
|
#define ITEMDESC_FONT BLOCKFONT2
|
|
#define INV_BAR_DX 5
|
|
#define INV_BAR_DY 21
|
|
#define ITEM_STATS_WIDTH 26
|
|
#define ITEM_STATS_HEIGHT 8
|
|
#define EXCEPTIONAL_GUN_DAMAGE 40
|
|
#define EXCEPTIONAL_MELEE_DAMAGE 40
|
|
#define EXCEPTIONAL_WEIGHT 20
|
|
#define EXCEPTIONAL_RANGE 400
|
|
#define EXCEPTIONAL_MAGAZINE 50
|
|
#define EXCEPTIONAL_AP_COST 5
|
|
#define EXCEPTIONAL_BURST_SIZE 5
|
|
#define EXCEPTIONAL_RELIABILITY 2
|
|
#define EXCEPTIONAL_REPAIR_EASE 2
|
|
#define EXCEPTIONAL_ACCURACY 4
|
|
#define ITEMDESC_FONTHIGHLIGHT FONT_MCOLOR_WHITE
|
|
|
|
//CHRISL: extern'd for EDB project
|
|
extern INT16 gsInvDescX;
|
|
extern INT16 gsInvDescY;
|
|
extern UINT8 gubItemDescStatusIndex;
|
|
|
|
extern INT16 BULLET_SING_X;
|
|
extern INT16 BULLET_SING_Y;
|
|
extern INT16 BULLET_BURST_X;
|
|
extern INT16 BULLET_BURST_Y;
|
|
extern INT16 ITEMDESC_CALIBER_X;
|
|
extern INT16 ITEMDESC_CALIBER_Y;
|
|
extern INT16 ITEMDESC_CALIBER_WIDTH;
|
|
extern INT16 ITEMDESC_NAME_X;
|
|
extern INT16 ITEMDESC_NAME_Y;
|
|
extern INT16 ITEMDESC_ITEM_X;
|
|
extern INT16 ITEMDESC_ITEM_Y;
|
|
extern INT16 ITEMDESC_ITEM_STATUS_X;
|
|
extern INT16 ITEMDESC_ITEM_STATUS_Y;
|
|
extern INT16 ITEMDESC_ITEM_STATUS_HEIGHT;
|
|
extern INT16 ITEMDESC_AMMO_X;
|
|
extern INT16 ITEMDESC_AMMO_Y;
|
|
extern INT16 ITEMDESC_DONE_X;
|
|
extern INT16 ITEMDESC_DONE_Y;
|
|
|
|
// A STRUCT USED INTERNALLY FOR INV SLOT REGIONS
|
|
typedef struct
|
|
{
|
|
BOOLEAN fBigPocket;
|
|
INT16 sBarDx;
|
|
INT16 sBarDy;
|
|
INT16 sWidth;
|
|
INT16 sHeight;
|
|
INT16 sX; // starts at 0, gets set via InitInvSlotInterface()
|
|
INT16 sY; // starts at 0, gets set via InitInvSlotInterface()
|
|
} INV_REGIONS;
|
|
|
|
// USED TO SETUP REGION POSITIONS, ETC
|
|
typedef struct
|
|
{
|
|
INT16 sX;
|
|
INT16 sY;
|
|
} INV_REGION_DESC;
|
|
|
|
|
|
class OLD_ITEM_CURSOR_SAVE_INFO_101
|
|
{
|
|
public:
|
|
OLD_OBJECTTYPE_101 ItemPointerInfo;
|
|
UINT8 ubSoldierID;
|
|
UINT8 ubInvSlot;
|
|
BOOLEAN fCursorActive;
|
|
INT8 bPadding[5];
|
|
|
|
};
|
|
|
|
|
|
class ITEM_CURSOR_SAVE_INFO
|
|
{
|
|
public:
|
|
ITEM_CURSOR_SAVE_INFO& operator=(OLD_ITEM_CURSOR_SAVE_INFO_101& src)
|
|
{
|
|
this->fCursorActive = src.fCursorActive;
|
|
this->ItemPointerInfo = src.ItemPointerInfo;
|
|
this->ubInvSlot = src.ubInvSlot;
|
|
this->ubSoldierID = src.ubSoldierID;
|
|
return *this;
|
|
}
|
|
//could use a little tidying up
|
|
BOOLEAN Save(HWFILE hFile);
|
|
BOOLEAN Load(HWFILE hFile);
|
|
|
|
UINT8 ubSoldierID;
|
|
UINT8 ubInvSlot;
|
|
BOOLEAN fCursorActive;
|
|
OBJECTTYPE ItemPointerInfo;
|
|
};
|
|
|
|
// HEADROCK HAM 5: Enums for big-item display attachment asterisks.
|
|
enum
|
|
{
|
|
ATTACHMENT_NONE,
|
|
ATTACHMENT_GENERAL,
|
|
ATTACHMENT_GL,
|
|
ATTACHMENT_RECOILREDUCTION,
|
|
ATTACHMENT_OPTICAL,
|
|
};
|
|
|
|
// HEADROCK HAM 5: Asterisks for use with big item images
|
|
extern UINT32 guiAttachmentAsterisks;
|
|
|
|
// Itempickup stuff
|
|
BOOLEAN InitializeItemPickupMenu( SOLDIERTYPE *pSoldier, INT32 sGridNo, ITEM_POOL *pItemPool, INT16 sScreenX, INT16 sScreenY, INT8 bZLevel );
|
|
void RenderItemPickupMenu( );
|
|
void RemoveItemPickupMenu( );
|
|
void SetItemPickupMenuDirty( BOOLEAN fDirtyLevel );
|
|
BOOLEAN HandleItemPickupMenu( );
|
|
void SetPickUpMenuDirtyLevel( BOOLEAN fDirtyLevel );
|
|
|
|
|
|
// FUNCTIONS FOR INTERFACEING WITH ITEM PANEL STUFF
|
|
void INVRenderINVPanelItem( SOLDIERTYPE *pSoldier, INT16 sPocket, UINT8 fDirtyLevel );
|
|
BOOLEAN InitInvSlotInterface( INV_REGION_DESC *pRegionDesc , INV_REGION_DESC *pCamoRegion, MOUSE_CALLBACK INVMoveCallback, MOUSE_CALLBACK INVClickCallback, MOUSE_CALLBACK INVMoveCammoCallback, MOUSE_CALLBACK INVClickCammoCallback, BOOLEAN fSetHighestPrioity );
|
|
void ShutdownInvSlotInterface( );
|
|
void GetSlotInvXY( UINT8 ubPos, INT16 *psX, INT16 *psY );
|
|
void GetSlotInvHeightWidth( UINT8 ubPos, INT16 *psWidth, INT16 *psHeight );
|
|
void HandleRenderInvSlots( SOLDIERTYPE *pSoldier, UINT8 fDirtyLevel );
|
|
void HandleNewlyAddedItems( SOLDIERTYPE *pSoldier, BOOLEAN *fDirtyLevel );
|
|
void RenderInvBodyPanel( SOLDIERTYPE *pSoldier, INT16 sX, INT16 sY );
|
|
void DisableInvRegions( BOOLEAN fDisable );
|
|
|
|
void DegradeNewlyAddedItems( );
|
|
void CheckForAnyNewlyAddedItems( SOLDIERTYPE *pSoldier );
|
|
|
|
|
|
BOOLEAN HandleCompatibleAmmoUI( SOLDIERTYPE *pSoldier, INT8 bInvPos, BOOLEAN fOn );
|
|
|
|
|
|
|
|
// THIS FUNCTION IS CALLED TO RENDER AN ITEM.
|
|
// uiBuffer - The Dest Video Surface - can only be FRAME_BUFFER or guiSAVEBUFFER
|
|
// pSoldier - used for determining whether burst mode needs display
|
|
// pObject - Usually taken from pSoldier->inv[HANDPOS]
|
|
// sX, sY, Width, Height, - Will Center it in the Width
|
|
// fDirtyLevel if == DIRTYLEVEL2 will render everything
|
|
// if == DIRTYLEVEL1 will render bullets and status only
|
|
//
|
|
// pubHighlightCounter - if not null, and == 2 - will display name above item
|
|
// - if == 1 will only dirty the name space and then set counter to 0
|
|
// Last parameter used mainly for when mouse is over item
|
|
|
|
void RenderBulletIcon(OBJECTTYPE *pObject, UINT32 ubStatusIndex = 0);
|
|
void INVRenderItem( UINT32 uiBuffer, SOLDIERTYPE * pSoldier, OBJECTTYPE *pObject, INT16 sX, INT16 sY, INT16 sWidth, INT16 sHeight, UINT8 fDirtyLevel, UINT8 *pubHighlightCounter, UINT8 ubStatusIndex, BOOLEAN fOutline, INT16 sOutlineColor, UINT8 iter = 0 );
|
|
// HEADROCK HAM 5: Drawing a large item pic with extra data.
|
|
void MAPINVRenderItem( UINT32 uiBuffer, SOLDIERTYPE * pSoldier, OBJECTTYPE *pObject, UINT32 uiItemGraphicNum, INT16 sX, INT16 sY, INT16 sWidth, INT16 sHeight, BOOLEAN fOutline, INT16 sOutlineColor );
|
|
// CHRISL: Add a new function that will be used to render a pocket silhouette
|
|
void INVRenderSilhouette( UINT32 uiBugger, INT16 PocketIndex, INT16 SilIndex, INT16 sX, INT16 sY, INT16 sWideth, INT16 sHeight);
|
|
// CHRISL: New function to handle display of inventory quantities based on item current in cursor
|
|
void RenderPocketItemCapacity( UINT32 uiWhichBuffer, INT8 pCapacity, INT16 bPos, SOLDIERTYPE *pSoldier, OBJECTTYPE *pObj, INT16 sX, INT16 sY );
|
|
// CHRISL: New function to display items stored in an LBENODE
|
|
void RenderLBENODEItems( OBJECTTYPE *pObj, int subObject );
|
|
// CHRISL: New function to setup GSMInvData based on game options
|
|
void InitInvData(INV_REGIONS &InvData, BOOLEAN fBigPocket, INT16 sBarDx, INT16 sBarDy, INT16 sWidth, INT16 sHeight, INT16 sX, INT16 sY);
|
|
void InitInventoryOld();
|
|
void InitInventoryNew();
|
|
void InitInventoryVehicle(INV_REGION_DESC *pRegionDesc, MOUSE_CALLBACK INVMoveCallback, MOUSE_CALLBACK INVClickCallback, BOOLEAN fSetHighestPrioity);
|
|
void InitInventorySoldier(INV_REGION_DESC *pRegionDesc, MOUSE_CALLBACK INVMoveCallback, MOUSE_CALLBACK INVClickCallback, BOOLEAN fSetHighestPrioity, BOOLEAN fNIVmode);
|
|
|
|
|
|
|
|
extern BOOLEAN gfInItemDescBox;
|
|
|
|
BOOLEAN InItemDescriptionBox( );
|
|
BOOLEAN InitItemDescriptionBox( SOLDIERTYPE *pSoldier, UINT8 ubPosition, INT16 sX, INT16 sY, UINT8 ubStatusIndex );
|
|
BOOLEAN InternalInitItemDescriptionBox( OBJECTTYPE *pObject, INT16 sX, INT16 sY, UINT8 ubStatusIndex, SOLDIERTYPE *pSoldier, UINT8 ubPosition = NUM_INV_SLOTS );
|
|
void UpdateAttachmentTooltips( OBJECTTYPE *pObject, UINT8 ubStatusIndex );
|
|
BOOLEAN InitKeyItemDescriptionBox( SOLDIERTYPE *pSoldier, UINT8 ubPosition, INT16 sX, INT16 sY, UINT8 ubStatusIndex );
|
|
void RenderItemDescriptionBox( );
|
|
void HandleItemDescriptionBox( BOOLEAN *pfDirty );
|
|
void DeleteItemDescriptionBox( );
|
|
extern BOOLEAN UseNASDesc(OBJECTTYPE *pObject);
|
|
INT16 sNASXCorrection(OBJECTTYPE * pObject);
|
|
INT16 sNASYCorrection(OBJECTTYPE * pObject);
|
|
void HandleItemDescTabButton( );
|
|
|
|
BOOLEAN InItemStackPopup( );
|
|
BOOLEAN InitItemStackPopup( SOLDIERTYPE *pSoldier, UINT8 ubPosition, INT16 sInvX, INT16 sInvY, INT16 sInvWidth, INT16 sInvHeight );
|
|
BOOLEAN InSectorStackPopup( );
|
|
BOOLEAN InitSectorStackPopup( SOLDIERTYPE *pSoldier, WORLDITEM *pInventoryPoolList, INT32 ubPosition, INT16 sInvX, INT16 sInvY, INT16 sInvWidth, INT16 sInvHeight );
|
|
void RenderItemStackPopup( BOOLEAN fFullRender );
|
|
void HandleItemStackPopup( );
|
|
void DeleteItemStackPopup( );
|
|
void EndItemStackPopupWithItemInHand( );
|
|
|
|
|
|
// keyring handlers
|
|
BOOLEAN InitKeyRingPopup( SOLDIERTYPE *pSoldier, INT16 sInvX, INT16 sInvY, INT16 sInvWidth, INT16 sInvHeight );
|
|
void RenderKeyRingPopup( BOOLEAN fFullRender );
|
|
void InitKeyRingInterface( MOUSE_CALLBACK KeyRingClickCallback );
|
|
void InitMapKeyRingInterface( MOUSE_CALLBACK KeyRingClickCallback );
|
|
void DeleteKeyRingPopup( );
|
|
|
|
|
|
void ShutdownKeyRingInterface( void );
|
|
void ShutdownInventoryInterface( void );
|
|
|
|
BOOLEAN InKeyRingPopup( void );
|
|
void BeginKeyRingItemPointer( SOLDIERTYPE *pSoldier, UINT8 ubKeyRingPosition );
|
|
|
|
|
|
extern OBJECTTYPE *gpItemPointer;
|
|
extern OBJECTTYPE gItemPointer;
|
|
extern SOLDIERTYPE *gpItemPointerSoldier;
|
|
extern UINT16 usItemSnapCursor;
|
|
extern UINT16 us16BPPItemCyclePlacedItemColors[ 20 ];
|
|
extern BOOLEAN gfItemPointerDifferentThanDefault;
|
|
|
|
|
|
void BeginItemPointer( SOLDIERTYPE *pSoldier, UINT8 ubHandPos );
|
|
void InternalBeginItemPointer( SOLDIERTYPE *pSoldier, OBJECTTYPE *pObject, INT8 bHandPos );
|
|
void EndItemPointer( );
|
|
void DrawItemFreeCursor( );
|
|
void DrawItemTileCursor( );
|
|
void HideItemTileCursor( );
|
|
void InitItemInterface( );
|
|
BOOLEAN ItemCursorInLobRange( INT32 usMapPos );
|
|
BOOLEAN HandleItemPointerClick( INT32 usMapPos );
|
|
UINT32 GetInterfaceGraphicForItem( INVTYPE *pItem );
|
|
UINT16 GetTileGraphicForItem( INVTYPE *pItem );
|
|
BOOLEAN LoadTileGraphicForItem( INVTYPE *pItem, UINT32 *puiVo );
|
|
|
|
void GetHelpTextForItem( STR16 pzStr, OBJECTTYPE *pObject, SOLDIERTYPE *pSoldier, int subObject = -1 );
|
|
|
|
void CancelItemPointer( );
|
|
|
|
BOOLEAN LoadItemCursorFromSavedGame( HWFILE hFile );
|
|
BOOLEAN SaveItemCursorToSavedGame( HWFILE hFile );
|
|
|
|
void EnableKeyRing( BOOLEAN fEnable );
|
|
|
|
// handle compatable items for merc and map inventory
|
|
BOOLEAN HandleCompatibleAmmoUIForMapScreen( SOLDIERTYPE *pSoldier, INT32 bInvPos, BOOLEAN fOn, BOOLEAN fFromMerc );
|
|
BOOLEAN HandleCompatibleAmmoUIForMapInventory( SOLDIERTYPE *pSoldier, INT32 bInvPos, INT32 iStartSlotNumber, BOOLEAN fOn, BOOLEAN fFromMerc );
|
|
void ResetCompatibleItemArray( );
|
|
|
|
void CycleItemDescriptionItem( INT16 sX, INT16 sY );
|
|
INT16 CycleItems( INT16 usOldItem );
|
|
|
|
BOOLEAN InitializeStealItemPickupMenu( SOLDIERTYPE *pSoldier, SOLDIERTYPE *pOpponent, ITEM_POOL *pItemPool, UINT8 ubCount);
|
|
|
|
// BOB : quick attachment selection popups
|
|
extern POPUP* gItemDescAttachmentPopups[MAX_ATTACHMENTS]; // popup list for attachment slots
|
|
extern INT32 giActiveAttachmentPopup; // the attachment popup to display in mapscreen
|
|
|
|
// BOB : quick equip popups
|
|
extern POPUP* gEquipPopups[NUM_INV_SLOTS]; // popup list for attachment slots
|
|
extern INT32 giActiveEquipPopup; // the attachment popup to display in mapscreen
|
|
|
|
// HEADROCK HAM 5: Item Transformation Popup
|
|
extern POPUP* gItemDescTransformPopup;
|
|
extern BOOLEAN gfItemDescTransformPopupInitialized;
|
|
extern BOOLEAN gfItemDescTransformPopupVisible;
|
|
|
|
// BOB : duh...
|
|
void DoAttachment( UINT8 subObject, INT32 iItemPos );
|
|
|
|
// THE_BOB (AKA BOB): ammo box/mag popups
|
|
void PocketPopupFull( SOLDIERTYPE *pSoldier, INT16 sPocket ); // displays all suported options
|
|
void PocketPopupDefault( SOLDIERTYPE *pSoldier, INT16 sPocket ); // displays only pocket-specific (predefined) options
|
|
|
|
POPUP * createPopupForPocket( SOLDIERTYPE *pSoldier, INT16 sPocket ); // creates a popup positioned next to the pocket
|
|
|
|
// THE_BOB
|
|
extern UINT16 gsPocketUnderCursor;
|
|
|
|
|
|
void addArmorToPocketPopup( SOLDIERTYPE *pSoldier, INT16 sPocket, POPUP* popup );
|
|
void addLBEToPocketPopup( SOLDIERTYPE *pSoldier, INT16 sPocket, POPUP* popup );
|
|
void addWeaponsToPocketPopup( SOLDIERTYPE *pSoldier, INT16 sPocket, POPUP* popup );
|
|
void addWeaponGroupsToPocketPopup( SOLDIERTYPE *pSoldier, INT16 sPocket, POPUP* popup );
|
|
void addGrenadesToPocketPopup( SOLDIERTYPE *pSoldier, INT16 sPocket, POPUP* popup );
|
|
void addBombsToPocketPopup( SOLDIERTYPE *pSoldier, INT16 sPocket, POPUP* popup );
|
|
void addFaceGearToPocketPopup( SOLDIERTYPE *pSoldier, INT16 sPocket, POPUP* popup );
|
|
void addAmmoToPocketPopup( SOLDIERTYPE *pSoldier, INT16 sPocket, POPUP* popup );
|
|
|
|
void addRifleGrenadesToPocketPopup( SOLDIERTYPE *pSoldier, INT16 sPocket, POPUP* popup );
|
|
void addRocketAmmoToPocketPopup( SOLDIERTYPE *pSoldier, INT16 sPocket, POPUP* popup );
|
|
void addMiscToPocketPopup( SOLDIERTYPE *pSoldier, INT16 sPocket, POPUP* popup );
|
|
void addKitsToPocketPopup( SOLDIERTYPE *pSoldier, INT16 sPocket, POPUP* popup );
|
|
|
|
#endif
|