fallout2-ce/src/interface.h

228 lines
8.1 KiB
C

#ifndef INTERFACE_H
#define INTERFACE_H
#include "art.h"
#include "db.h"
#include "geometry.h"
#include "obj_types.h"
typedef enum Hand {
// Item1 (Punch)
HAND_LEFT,
// Item2 (Kick)
HAND_RIGHT,
HAND_COUNT,
} Hand;
typedef enum InterfaceItemAction {
INTERFACE_ITEM_ACTION_DEFAULT = -1,
INTERFACE_ITEM_ACTION_USE,
INTERFACE_ITEM_ACTION_PRIMARY,
INTERFACE_ITEM_ACTION_PRIMARY_AIMING,
INTERFACE_ITEM_ACTION_SECONDARY,
INTERFACE_ITEM_ACTION_SECONDARY_AIMING,
INTERFACE_ITEM_ACTION_RELOAD,
INTERFACE_ITEM_ACTION_COUNT,
} InterfaceItemAction;
// The values of it's members are offsets to beginning of numbers in
// numbers.frm.
typedef enum InterfaceNumbersColor {
INTERFACE_NUMBERS_COLOR_WHITE = 0,
INTERFACE_NUMBERS_COLOR_YELLOW = 120,
INTERFACE_NUMBERS_COLOR_RED = 240,
} InterfaceNumbersColor;
#define INDICATOR_BOX_WIDTH 130
#define INDICATOR_BOX_HEIGHT 21
#define INTERFACE_BAR_WIDTH 640
#define INTERFACE_BAR_HEIGHT 100
// The maximum number of indicator boxes the indicator bar can display.
//
// For unknown reason this number is 6, even though there are only 5 different
// indicator types. In addition to that, default screen width 640px cannot hold
// 6 boxes 130px each.
#define INDICATOR_SLOTS_COUNT (6)
// Available indicators.
//
// Indicator boxes in the bar are displayed according to the order of this enum.
typedef enum Indicator {
INDICATOR_ADDICT,
INDICATOR_SNEAK,
INDICATOR_LEVEL,
INDICATOR_POISONED,
INDICATOR_RADIATED,
INDICATOR_COUNT,
} Indicator;
// Provides metadata about indicator boxes.
typedef struct IndicatorDescription {
// An identifier of title in `intrface.msg`.
int title;
// A flag denoting this box represents something harmful to the player. It
// affects color of the title.
bool isBad;
// Prerendered indicator data.
//
// This value is provided at runtime during indicator box initialization.
// It includes indicator box background with it's title positioned in the
// center and is green colored if indicator is good, or red otherwise, as
// denoted by [isBad] property.
unsigned char* data;
} IndicatorDescription;
typedef struct InterfaceItemState {
Object* item;
unsigned char isDisabled;
unsigned char isWeapon;
int primaryHitMode;
int secondaryHitMode;
int action;
int itemFid;
} InterfaceItemState;
extern bool gInterfaceBarInitialized;
extern bool gInterfaceBarSwapHandsInProgress;
extern bool gInterfaceBarEnabled;
extern bool _intfaceHidden;
extern int gInventoryButton;
extern CacheEntry* gInventoryButtonUpFrmHandle;
extern CacheEntry* gInventoryButtonDownFrmHandle;
extern int gOptionsButton;
extern CacheEntry* gOptionsButtonUpFrmHandle;
extern CacheEntry* gOptionsButtonDownFrmHandle;
extern int gSkilldexButton;
extern CacheEntry* gSkilldexButtonUpFrmHandle;
extern CacheEntry* gSkilldexButtonDownFrmHandle;
extern CacheEntry* gSkilldexButtonMaskFrmHandle;
extern int gMapButton;
extern CacheEntry* gMapButtonUpFrmHandle;
extern CacheEntry* gMapButtonDownFrmHandle;
extern CacheEntry* gMapButtonMaskFrmHandle;
extern int gPipboyButton;
extern CacheEntry* gPipboyButtonUpFrmHandle;
extern CacheEntry* gPipboyButtonDownFrmHandle;
extern int gCharacterButton;
extern CacheEntry* gCharacterButtonUpFrmHandle;
extern CacheEntry* gCharacterButtonDownFrmHandle;
extern int gSingleAttackButton;
extern CacheEntry* gSingleAttackButtonUpHandle;
extern CacheEntry* gSingleAttackButtonDownHandle;
extern CacheEntry* _itemButtonDisabledKey;
extern int gInterfaceCurrentHand;
extern const Rect gInterfaceBarMainActionRect;
extern int gChangeHandsButton;
extern CacheEntry* gChangeHandsButtonUpFrmHandle;
extern CacheEntry* gChangeHandsButtonDownFrmHandle;
extern CacheEntry* gChangeHandsButtonMaskFrmHandle;
extern bool gInterfaceBarEndButtonsIsVisible;
extern const Rect gInterfaceBarEndButtonsRect;
extern int gEndTurnButton;
extern CacheEntry* gEndTurnButtonUpFrmHandle;
extern CacheEntry* gEndTurnButtonDownFrmHandle;
extern int gEndCombatButton;
extern CacheEntry* gEndCombatButtonUpFrmHandle;
extern CacheEntry* gEndCombatButtonDownFrmHandle;
extern unsigned char* gGreenLightFrmData;
extern unsigned char* gYellowLightFrmData;
extern unsigned char* gRedLightFrmData;
extern const Rect gInterfaceBarActionPointsBarRect;
extern unsigned char* gNumbersFrmData;
extern IndicatorDescription gIndicatorDescriptions[INDICATOR_COUNT];
extern int gInterfaceBarWindow;
extern int gIndicatorBarWindow;
extern int gInterfaceLastRenderedHitPoints;
extern int gInterfaceLastRenderedHitPointsColor;
extern int gInterfaceLastRenderedArmorClass;
extern int gIndicatorSlots[INDICATOR_SLOTS_COUNT];
extern InterfaceItemState gInterfaceItemStates[HAND_COUNT];
extern CacheEntry* gYellowLightFrmHandle;
extern CacheEntry* gRedLightFrmHandle;
extern CacheEntry* gNumbersFrmHandle;
extern bool gIndicatorBarIsVisible;
extern unsigned char* gChangeHandsButtonUpFrmData;
extern CacheEntry* gGreenLightFrmHandle;
extern unsigned char* gEndCombatButtonUpFrmData;
extern unsigned char* gEndCombatButtonDownFrmData;
extern unsigned char* gChangeHandsButtonDownFrmData;
extern unsigned char* gEndTurnButtonDownFrmData;
extern unsigned char _itemButtonDown[12596];
extern unsigned char* gEndTurnButtonUpFrmData;
extern unsigned char* gChangeHandsButtonMaskFrmData;
extern unsigned char* gCharacterButtonUpFrmData;
extern unsigned char* gSingleAttackButtonUpData;
extern unsigned char* _itemButtonDisabled;
extern unsigned char* gMapButtonDownFrmData;
extern unsigned char* gPipboyButtonUpFrmData;
extern unsigned char* gCharacterButtonDownFrmData;
extern unsigned char* gSingleAttackButtonDownData;
extern unsigned char* gPipboyButtonDownFrmData;
extern unsigned char* gMapButtonMaskFrmData;
extern unsigned char _itemButtonUp[12596];
extern unsigned char* gMapButtonUpFrmData;
extern unsigned char* gSkilldexButtonMaskFrmData;
extern unsigned char* gSkilldexButtonDownFrmData;
extern unsigned char* gInterfaceWindowBuffer;
extern unsigned char* gInventoryButtonUpFrmData;
extern unsigned char* gOptionsButtonUpFrmData;
extern unsigned char* gOptionsButtonDownFrmData;
extern unsigned char* gSkilldexButtonUpFrmData;
extern unsigned char* gInventoryButtonDownFrmData;
extern unsigned char gInterfaceActionPointsBarBackground[450];
extern bool gInterfaceBarMode;
int interfaceInit();
void interfaceReset();
void interfaceFree();
int interfaceLoad(File* stream);
int interfaceSave(File* stream);
void _intface_show();
void interfaceBarEnable();
void interfaceBarDisable();
bool interfaceBarEnabled();
void interfaceBarRefresh();
void interfaceRenderHitPoints(bool animate);
void interfaceRenderArmorClass(bool animate);
void interfaceRenderActionPoints(int actionPointsLeft, int bonusActionPoints);
int interfaceGetCurrentHitMode(int* hitMode, bool* aiming);
int interfaceUpdateItems(bool animated, int leftItemAction, int rightItemAction);
int interfaceBarSwapHands(bool animated);
int interfaceGetItemActions(int* leftItemAction, int* rightItemAction);
int interfaceCycleItemAction();
void _intface_use_item();
int interfaceGetCurrentHand();
int interfaceGetActiveItem(Object** a1);
int _intface_update_ammo_lights();
void interfaceBarEndButtonsShow(bool animated);
void interfaceBarEndButtonsHide(bool animated);
void interfaceBarEndButtonsRenderGreenLights();
void interfaceBarEndButtonsRenderRedLights();
int interfaceBarRefreshMainAction();
int _intface_redraw_items_callback(Object* a1, Object* a2);
int _intface_change_fid_callback(Object* a1, Object* a2);
void interfaceBarSwapHandsAnimatePutAwayTakeOutSequence(int previousWeaponAnimationCode, int weaponAnimationCode);
int endTurnButtonInit();
int endTurnButtonFree();
int endCombatButtonInit();
int endCombatButtonFree();
void interfaceUpdateAmmoBar(int x, int ratio);
int _intface_item_reload();
void interfaceRenderCounter(int x, int y, int previousValue, int value, int offset, int delay);
int indicatorBarInit();
void interfaceBarFree();
void indicatorBarReset();
int indicatorBarRefresh();
int indicatorBoxCompareByPosition(const void* a, const void* b);
void indicatorBarRender(int count);
bool indicatorBarAdd(int indicator);
bool indicatorBarShow();
bool indicatorBarHide();
#endif /* INTERFACE_H */