parent
75068c8236
commit
c656668f57
281
src/interface.cc
281
src/interface.cc
|
@ -1,6 +1,7 @@
|
|||
#include "interface.h"
|
||||
|
||||
#include "animation.h"
|
||||
#include "art.h"
|
||||
#include "color.h"
|
||||
#include "combat.h"
|
||||
#include "config.h"
|
||||
|
@ -15,6 +16,7 @@
|
|||
#include "game_config.h"
|
||||
#include "game_mouse.h"
|
||||
#include "game_sound.h"
|
||||
#include "geometry.h"
|
||||
#include "item.h"
|
||||
#include "memory.h"
|
||||
#include "object.h"
|
||||
|
@ -43,149 +45,222 @@
|
|||
// Minimum poison amount to display POISONED indicator.
|
||||
#define POISON_INDICATOR_THRESHOLD 0
|
||||
|
||||
// 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)
|
||||
|
||||
// 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;
|
||||
|
||||
// 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;
|
||||
|
||||
static int _intface_redraw_items_callback(Object* a1, Object* a2);
|
||||
static int _intface_change_fid_callback(Object* a1, Object* a2);
|
||||
static void interfaceBarSwapHandsAnimatePutAwayTakeOutSequence(int previousWeaponAnimationCode, int weaponAnimationCode);
|
||||
static int interfaceBarRefreshMainAction();
|
||||
static int endTurnButtonInit();
|
||||
static int endTurnButtonFree();
|
||||
static int endCombatButtonInit();
|
||||
static int endCombatButtonFree();
|
||||
static void interfaceUpdateAmmoBar(int x, int ratio);
|
||||
static int _intface_item_reload();
|
||||
static void interfaceRenderCounter(int x, int y, int previousValue, int value, int offset, int delay);
|
||||
static int indicatorBarInit();
|
||||
static void interfaceBarFree();
|
||||
static void indicatorBarReset();
|
||||
static int indicatorBoxCompareByPosition(const void* a, const void* b);
|
||||
static void indicatorBarRender(int count);
|
||||
static bool indicatorBarAdd(int indicator);
|
||||
|
||||
// 0x518F08
|
||||
bool gInterfaceBarInitialized = false;
|
||||
static bool gInterfaceBarInitialized = false;
|
||||
|
||||
// 0x518F0C
|
||||
bool gInterfaceBarSwapHandsInProgress = false;
|
||||
static bool gInterfaceBarSwapHandsInProgress = false;
|
||||
|
||||
// 0x518F10
|
||||
bool gInterfaceBarEnabled = false;
|
||||
static bool gInterfaceBarEnabled = false;
|
||||
|
||||
// 0x518F14
|
||||
bool _intfaceHidden = false;
|
||||
static bool _intfaceHidden = false;
|
||||
|
||||
// 0x518F18
|
||||
int gInventoryButton = -1;
|
||||
static int gInventoryButton = -1;
|
||||
|
||||
// 0x518F1C
|
||||
CacheEntry* gInventoryButtonUpFrmHandle = NULL;
|
||||
static CacheEntry* gInventoryButtonUpFrmHandle = NULL;
|
||||
|
||||
// 0x518F20
|
||||
CacheEntry* gInventoryButtonDownFrmHandle = NULL;
|
||||
static CacheEntry* gInventoryButtonDownFrmHandle = NULL;
|
||||
|
||||
// 0x518F24
|
||||
int gOptionsButton = -1;
|
||||
static int gOptionsButton = -1;
|
||||
|
||||
// 0x518F28
|
||||
CacheEntry* gOptionsButtonUpFrmHandle = NULL;
|
||||
static CacheEntry* gOptionsButtonUpFrmHandle = NULL;
|
||||
|
||||
// 0x518F2C
|
||||
CacheEntry* gOptionsButtonDownFrmHandle = NULL;
|
||||
static CacheEntry* gOptionsButtonDownFrmHandle = NULL;
|
||||
|
||||
// 0x518F30
|
||||
int gSkilldexButton = -1;
|
||||
static int gSkilldexButton = -1;
|
||||
|
||||
// 0x518F34
|
||||
CacheEntry* gSkilldexButtonUpFrmHandle = NULL;
|
||||
static CacheEntry* gSkilldexButtonUpFrmHandle = NULL;
|
||||
|
||||
// 0x518F38
|
||||
CacheEntry* gSkilldexButtonDownFrmHandle = NULL;
|
||||
static CacheEntry* gSkilldexButtonDownFrmHandle = NULL;
|
||||
|
||||
// 0x518F3C
|
||||
CacheEntry* gSkilldexButtonMaskFrmHandle = NULL;
|
||||
static CacheEntry* gSkilldexButtonMaskFrmHandle = NULL;
|
||||
|
||||
// 0x518F40
|
||||
int gMapButton = -1;
|
||||
static int gMapButton = -1;
|
||||
|
||||
// 0x518F44
|
||||
CacheEntry* gMapButtonUpFrmHandle = NULL;
|
||||
static CacheEntry* gMapButtonUpFrmHandle = NULL;
|
||||
|
||||
// 0x518F48
|
||||
CacheEntry* gMapButtonDownFrmHandle = NULL;
|
||||
static CacheEntry* gMapButtonDownFrmHandle = NULL;
|
||||
|
||||
// 0x518F4C
|
||||
CacheEntry* gMapButtonMaskFrmHandle = NULL;
|
||||
static CacheEntry* gMapButtonMaskFrmHandle = NULL;
|
||||
|
||||
// 0x518F50
|
||||
int gPipboyButton = -1;
|
||||
static int gPipboyButton = -1;
|
||||
|
||||
// 0x518F54
|
||||
CacheEntry* gPipboyButtonUpFrmHandle = NULL;
|
||||
static CacheEntry* gPipboyButtonUpFrmHandle = NULL;
|
||||
|
||||
// 0x518F58
|
||||
CacheEntry* gPipboyButtonDownFrmHandle = NULL;
|
||||
static CacheEntry* gPipboyButtonDownFrmHandle = NULL;
|
||||
|
||||
// 0x518F5C
|
||||
int gCharacterButton = -1;
|
||||
static int gCharacterButton = -1;
|
||||
// 0x518F60
|
||||
CacheEntry* gCharacterButtonUpFrmHandle = NULL;
|
||||
static CacheEntry* gCharacterButtonUpFrmHandle = NULL;
|
||||
// 0x518F64
|
||||
CacheEntry* gCharacterButtonDownFrmHandle = NULL;
|
||||
static CacheEntry* gCharacterButtonDownFrmHandle = NULL;
|
||||
|
||||
// 0x518F68
|
||||
int gSingleAttackButton = -1;
|
||||
static int gSingleAttackButton = -1;
|
||||
|
||||
// 0x518F6C
|
||||
CacheEntry* gSingleAttackButtonUpHandle = NULL;
|
||||
static CacheEntry* gSingleAttackButtonUpHandle = NULL;
|
||||
|
||||
// 0x518F70
|
||||
CacheEntry* gSingleAttackButtonDownHandle = NULL;
|
||||
static CacheEntry* gSingleAttackButtonDownHandle = NULL;
|
||||
|
||||
//
|
||||
CacheEntry* _itemButtonDisabledKey = NULL;
|
||||
|
||||
// 0x518F78
|
||||
int gInterfaceCurrentHand = HAND_LEFT;
|
||||
static int gInterfaceCurrentHand = HAND_LEFT;
|
||||
|
||||
// 0x518F7C
|
||||
const Rect gInterfaceBarMainActionRect = { 267, 26, 455, 93 };
|
||||
static const Rect gInterfaceBarMainActionRect = { 267, 26, 455, 93 };
|
||||
|
||||
// 0x518F8C
|
||||
int gChangeHandsButton = -1;
|
||||
static int gChangeHandsButton = -1;
|
||||
|
||||
// 0x518F90
|
||||
CacheEntry* gChangeHandsButtonUpFrmHandle = NULL;
|
||||
static CacheEntry* gChangeHandsButtonUpFrmHandle = NULL;
|
||||
|
||||
// 0x518F94
|
||||
CacheEntry* gChangeHandsButtonDownFrmHandle = NULL;
|
||||
static CacheEntry* gChangeHandsButtonDownFrmHandle = NULL;
|
||||
|
||||
// 0x518F98
|
||||
CacheEntry* gChangeHandsButtonMaskFrmHandle = NULL;
|
||||
static CacheEntry* gChangeHandsButtonMaskFrmHandle = NULL;
|
||||
|
||||
// 0x518F9C
|
||||
bool gInterfaceBarEndButtonsIsVisible = false;
|
||||
static bool gInterfaceBarEndButtonsIsVisible = false;
|
||||
|
||||
// Combat mode curtains rect.
|
||||
//
|
||||
// 0x518FA0
|
||||
const Rect gInterfaceBarEndButtonsRect = { 580, 38, 637, 96 };
|
||||
static const Rect gInterfaceBarEndButtonsRect = { 580, 38, 637, 96 };
|
||||
|
||||
// 0x518FB0
|
||||
int gEndTurnButton = -1;
|
||||
static int gEndTurnButton = -1;
|
||||
|
||||
// 0x518FB4
|
||||
CacheEntry* gEndTurnButtonUpFrmHandle = NULL;
|
||||
static CacheEntry* gEndTurnButtonUpFrmHandle = NULL;
|
||||
|
||||
// 0x518FB8
|
||||
CacheEntry* gEndTurnButtonDownFrmHandle = NULL;
|
||||
static CacheEntry* gEndTurnButtonDownFrmHandle = NULL;
|
||||
|
||||
// 0x518FBC
|
||||
int gEndCombatButton = -1;
|
||||
static int gEndCombatButton = -1;
|
||||
|
||||
// 0x518FC0
|
||||
CacheEntry* gEndCombatButtonUpFrmHandle = NULL;
|
||||
static CacheEntry* gEndCombatButtonUpFrmHandle = NULL;
|
||||
|
||||
// 0x518FC4
|
||||
CacheEntry* gEndCombatButtonDownFrmHandle = NULL;
|
||||
static CacheEntry* gEndCombatButtonDownFrmHandle = NULL;
|
||||
|
||||
// 0x518FC8
|
||||
unsigned char* gGreenLightFrmData = NULL;
|
||||
static unsigned char* gGreenLightFrmData = NULL;
|
||||
|
||||
// 0x518FCC
|
||||
unsigned char* gYellowLightFrmData = NULL;
|
||||
static unsigned char* gYellowLightFrmData = NULL;
|
||||
|
||||
// 0x518FD0
|
||||
unsigned char* gRedLightFrmData = NULL;
|
||||
static unsigned char* gRedLightFrmData = NULL;
|
||||
|
||||
// 0x518FD4
|
||||
const Rect gInterfaceBarActionPointsBarRect = { 316, 14, 406, 19 };
|
||||
static const Rect gInterfaceBarActionPointsBarRect = { 316, 14, 406, 19 };
|
||||
|
||||
// 0x518FE4
|
||||
unsigned char* gNumbersFrmData = NULL;
|
||||
static unsigned char* gNumbersFrmData = NULL;
|
||||
|
||||
// 0x518FE8
|
||||
IndicatorDescription gIndicatorDescriptions[INDICATOR_COUNT] = {
|
||||
static IndicatorDescription gIndicatorDescriptions[INDICATOR_COUNT] = {
|
||||
{ 102, true, NULL }, // ADDICT
|
||||
{ 100, false, NULL }, // SNEAK
|
||||
{ 101, false, NULL }, // LEVEL
|
||||
|
@ -197,132 +272,132 @@ IndicatorDescription gIndicatorDescriptions[INDICATOR_COUNT] = {
|
|||
int gInterfaceBarWindow = -1;
|
||||
|
||||
// 0x519028
|
||||
int gIndicatorBarWindow = -1;
|
||||
static int gIndicatorBarWindow = -1;
|
||||
|
||||
// Last hit points rendered in interface.
|
||||
//
|
||||
// Used to animate changes.
|
||||
//
|
||||
// 0x51902C
|
||||
int gInterfaceLastRenderedHitPoints = 0;
|
||||
static int gInterfaceLastRenderedHitPoints = 0;
|
||||
|
||||
// Last color used to render hit points in interface.
|
||||
//
|
||||
// Used to animate changes.
|
||||
//
|
||||
// 0x519030
|
||||
int gInterfaceLastRenderedHitPointsColor = INTERFACE_NUMBERS_COLOR_RED;
|
||||
static int gInterfaceLastRenderedHitPointsColor = INTERFACE_NUMBERS_COLOR_RED;
|
||||
|
||||
// Last armor class rendered in interface.
|
||||
//
|
||||
// Used to animate changes.
|
||||
//
|
||||
// 0x519034
|
||||
int gInterfaceLastRenderedArmorClass = 0;
|
||||
static int gInterfaceLastRenderedArmorClass = 0;
|
||||
|
||||
// Each slot contains one of indicators or -1 if slot is empty.
|
||||
//
|
||||
// 0x5970E0
|
||||
int gIndicatorSlots[INDICATOR_SLOTS_COUNT];
|
||||
static int gIndicatorSlots[INDICATOR_SLOTS_COUNT];
|
||||
|
||||
// 0x5970F8
|
||||
InterfaceItemState gInterfaceItemStates[HAND_COUNT];
|
||||
static InterfaceItemState gInterfaceItemStates[HAND_COUNT];
|
||||
|
||||
// 0x597128
|
||||
CacheEntry* gYellowLightFrmHandle;
|
||||
static CacheEntry* gYellowLightFrmHandle;
|
||||
|
||||
// 0x59712C
|
||||
CacheEntry* gRedLightFrmHandle;
|
||||
static CacheEntry* gRedLightFrmHandle;
|
||||
|
||||
// 0x597130
|
||||
CacheEntry* gNumbersFrmHandle;
|
||||
static CacheEntry* gNumbersFrmHandle;
|
||||
|
||||
// 0x597138
|
||||
bool gIndicatorBarIsVisible;
|
||||
static bool gIndicatorBarIsVisible;
|
||||
|
||||
// 0x59713C
|
||||
unsigned char* gChangeHandsButtonUpFrmData;
|
||||
static unsigned char* gChangeHandsButtonUpFrmData;
|
||||
|
||||
// 0x597140
|
||||
CacheEntry* gGreenLightFrmHandle;
|
||||
static CacheEntry* gGreenLightFrmHandle;
|
||||
|
||||
// 0x597144
|
||||
unsigned char* gEndCombatButtonUpFrmData;
|
||||
static unsigned char* gEndCombatButtonUpFrmData;
|
||||
|
||||
// 0x597148
|
||||
unsigned char* gEndCombatButtonDownFrmData;
|
||||
static unsigned char* gEndCombatButtonDownFrmData;
|
||||
|
||||
// 0x59714C
|
||||
unsigned char* gChangeHandsButtonDownFrmData;
|
||||
static unsigned char* gChangeHandsButtonDownFrmData;
|
||||
|
||||
// 0x597150
|
||||
unsigned char* gEndTurnButtonDownFrmData;
|
||||
static unsigned char* gEndTurnButtonDownFrmData;
|
||||
|
||||
// 0x597154
|
||||
unsigned char _itemButtonDown[188 * 67];
|
||||
static unsigned char _itemButtonDown[188 * 67];
|
||||
|
||||
// 0x59A288
|
||||
unsigned char* gEndTurnButtonUpFrmData;
|
||||
static unsigned char* gEndTurnButtonUpFrmData;
|
||||
|
||||
// 0x59A28C
|
||||
unsigned char* gChangeHandsButtonMaskFrmData;
|
||||
static unsigned char* gChangeHandsButtonMaskFrmData;
|
||||
|
||||
// 0x59A290
|
||||
unsigned char* gCharacterButtonUpFrmData;
|
||||
static unsigned char* gCharacterButtonUpFrmData;
|
||||
|
||||
// 0x59A294
|
||||
unsigned char* gSingleAttackButtonUpData;
|
||||
static unsigned char* gSingleAttackButtonUpData;
|
||||
|
||||
// 0x59A298
|
||||
unsigned char* _itemButtonDisabled;
|
||||
static unsigned char* _itemButtonDisabled;
|
||||
|
||||
// 0x59A29C
|
||||
unsigned char* gMapButtonDownFrmData;
|
||||
static unsigned char* gMapButtonDownFrmData;
|
||||
|
||||
// 0x59A2A0
|
||||
unsigned char* gPipboyButtonUpFrmData;
|
||||
static unsigned char* gPipboyButtonUpFrmData;
|
||||
|
||||
// 0x59A2A4
|
||||
unsigned char* gCharacterButtonDownFrmData;
|
||||
static unsigned char* gCharacterButtonDownFrmData;
|
||||
|
||||
// 0x59A2A8
|
||||
unsigned char* gSingleAttackButtonDownData;
|
||||
static unsigned char* gSingleAttackButtonDownData;
|
||||
|
||||
// 0x59A2AC
|
||||
unsigned char* gPipboyButtonDownFrmData;
|
||||
static unsigned char* gPipboyButtonDownFrmData;
|
||||
|
||||
// 0x59A2B0
|
||||
unsigned char* gMapButtonMaskFrmData;
|
||||
static unsigned char* gMapButtonMaskFrmData;
|
||||
|
||||
// 0x59A2B4
|
||||
unsigned char _itemButtonUp[188 * 67];
|
||||
static unsigned char _itemButtonUp[188 * 67];
|
||||
|
||||
// 0x59D3E8
|
||||
unsigned char* gMapButtonUpFrmData;
|
||||
static unsigned char* gMapButtonUpFrmData;
|
||||
|
||||
// 0x59D3EC
|
||||
unsigned char* gSkilldexButtonMaskFrmData;
|
||||
static unsigned char* gSkilldexButtonMaskFrmData;
|
||||
|
||||
// 0x59D3F0
|
||||
unsigned char* gSkilldexButtonDownFrmData;
|
||||
static unsigned char* gSkilldexButtonDownFrmData;
|
||||
|
||||
// 0x59D3F4
|
||||
unsigned char* gInterfaceWindowBuffer;
|
||||
static unsigned char* gInterfaceWindowBuffer;
|
||||
|
||||
// 0x59D3F8
|
||||
unsigned char* gInventoryButtonUpFrmData;
|
||||
static unsigned char* gInventoryButtonUpFrmData;
|
||||
|
||||
// 0x59D3FC
|
||||
unsigned char* gOptionsButtonUpFrmData;
|
||||
static unsigned char* gOptionsButtonUpFrmData;
|
||||
|
||||
// 0x59D400
|
||||
unsigned char* gOptionsButtonDownFrmData;
|
||||
static unsigned char* gOptionsButtonDownFrmData;
|
||||
|
||||
// 0x59D404
|
||||
unsigned char* gSkilldexButtonUpFrmData;
|
||||
static unsigned char* gSkilldexButtonUpFrmData;
|
||||
|
||||
// 0x59D408
|
||||
unsigned char* gInventoryButtonDownFrmData;
|
||||
static unsigned char* gInventoryButtonDownFrmData;
|
||||
|
||||
// A slice of main interface background containing 10 shadowed action point
|
||||
// dots. In combat mode individual colored dots are rendered on top of this
|
||||
|
@ -331,7 +406,7 @@ unsigned char* gInventoryButtonDownFrmData;
|
|||
// This buffer is initialized once and does not change throughout the game.
|
||||
//
|
||||
// 0x59D40C
|
||||
unsigned char gInterfaceActionPointsBarBackground[90 * 5];
|
||||
static unsigned char gInterfaceActionPointsBarBackground[90 * 5];
|
||||
|
||||
// Should the game window stretch all the way to the bottom or sit at the top of the interface bar (default)
|
||||
bool gInterfaceBarMode = false;
|
||||
|
@ -1657,7 +1732,7 @@ void interfaceBarEndButtonsRenderRedLights()
|
|||
}
|
||||
|
||||
// 0x45FD88
|
||||
int interfaceBarRefreshMainAction()
|
||||
static int interfaceBarRefreshMainAction()
|
||||
{
|
||||
if (gInterfaceBarWindow == -1) {
|
||||
return -1;
|
||||
|
@ -1924,21 +1999,21 @@ int interfaceBarRefreshMainAction()
|
|||
}
|
||||
|
||||
// 0x460658
|
||||
int _intface_redraw_items_callback(Object* a1, Object* a2)
|
||||
static int _intface_redraw_items_callback(Object* a1, Object* a2)
|
||||
{
|
||||
interfaceBarRefreshMainAction();
|
||||
return 0;
|
||||
}
|
||||
|
||||
// 0x460660
|
||||
int _intface_change_fid_callback(Object* a1, Object* a2)
|
||||
static int _intface_change_fid_callback(Object* a1, Object* a2)
|
||||
{
|
||||
gInterfaceBarSwapHandsInProgress = false;
|
||||
return 0;
|
||||
}
|
||||
|
||||
// 0x46066C
|
||||
void interfaceBarSwapHandsAnimatePutAwayTakeOutSequence(int previousWeaponAnimationCode, int weaponAnimationCode)
|
||||
static void interfaceBarSwapHandsAnimatePutAwayTakeOutSequence(int previousWeaponAnimationCode, int weaponAnimationCode)
|
||||
{
|
||||
gInterfaceBarSwapHandsInProgress = true;
|
||||
|
||||
|
@ -1997,7 +2072,7 @@ void interfaceBarSwapHandsAnimatePutAwayTakeOutSequence(int previousWeaponAnimat
|
|||
}
|
||||
|
||||
// 0x4607E0
|
||||
int endTurnButtonInit()
|
||||
static int endTurnButtonInit()
|
||||
{
|
||||
int fid;
|
||||
|
||||
|
@ -2033,7 +2108,7 @@ int endTurnButtonInit()
|
|||
}
|
||||
|
||||
// 0x4608C4
|
||||
int endTurnButtonFree()
|
||||
static int endTurnButtonFree()
|
||||
{
|
||||
if (gInterfaceBarWindow == -1) {
|
||||
return -1;
|
||||
|
@ -2060,7 +2135,7 @@ int endTurnButtonFree()
|
|||
}
|
||||
|
||||
// 0x460940
|
||||
int endCombatButtonInit()
|
||||
static int endCombatButtonInit()
|
||||
{
|
||||
int fid;
|
||||
|
||||
|
@ -2096,7 +2171,7 @@ int endCombatButtonInit()
|
|||
}
|
||||
|
||||
// 0x460A24
|
||||
int endCombatButtonFree()
|
||||
static int endCombatButtonFree()
|
||||
{
|
||||
if (gInterfaceBarWindow == -1) {
|
||||
return -1;
|
||||
|
@ -2123,7 +2198,7 @@ int endCombatButtonFree()
|
|||
}
|
||||
|
||||
// 0x460AA0
|
||||
void interfaceUpdateAmmoBar(int x, int ratio)
|
||||
static void interfaceUpdateAmmoBar(int x, int ratio)
|
||||
{
|
||||
if ((ratio & 1) != 0) {
|
||||
ratio -= 1;
|
||||
|
@ -2157,7 +2232,7 @@ void interfaceUpdateAmmoBar(int x, int ratio)
|
|||
}
|
||||
|
||||
// 0x460B20
|
||||
int _intface_item_reload()
|
||||
static int _intface_item_reload()
|
||||
{
|
||||
if (gInterfaceBarWindow == -1) {
|
||||
return -1;
|
||||
|
@ -2188,7 +2263,7 @@ int _intface_item_reload()
|
|||
// [offset] = 0 - grey, 120 - yellow, 240 - red.
|
||||
//
|
||||
// 0x460BA0
|
||||
void interfaceRenderCounter(int x, int y, int previousValue, int value, int offset, int delay)
|
||||
static void interfaceRenderCounter(int x, int y, int previousValue, int value, int offset, int delay)
|
||||
{
|
||||
if (value > 999) {
|
||||
value = 999;
|
||||
|
@ -2305,7 +2380,7 @@ void interfaceRenderCounter(int x, int y, int previousValue, int value, int offs
|
|||
}
|
||||
|
||||
// 0x461134
|
||||
int indicatorBarInit()
|
||||
static int indicatorBarInit()
|
||||
{
|
||||
int oldFont = fontGetCurrent();
|
||||
|
||||
|
@ -2396,7 +2471,7 @@ int indicatorBarInit()
|
|||
}
|
||||
|
||||
// 0x461454
|
||||
void interfaceBarFree()
|
||||
static void interfaceBarFree()
|
||||
{
|
||||
if (gIndicatorBarWindow != -1) {
|
||||
windowDestroy(gIndicatorBarWindow);
|
||||
|
@ -2415,7 +2490,7 @@ void interfaceBarFree()
|
|||
// NOTE: This function is not referenced in the original code.
|
||||
//
|
||||
// 0x4614A0
|
||||
void indicatorBarReset()
|
||||
static void indicatorBarReset()
|
||||
{
|
||||
if (gIndicatorBarWindow != -1) {
|
||||
windowDestroy(gIndicatorBarWindow);
|
||||
|
@ -2502,7 +2577,7 @@ int indicatorBarRefresh()
|
|||
}
|
||||
|
||||
// 0x461624
|
||||
int indicatorBoxCompareByPosition(const void* a, const void* b)
|
||||
static int indicatorBoxCompareByPosition(const void* a, const void* b)
|
||||
{
|
||||
int indicatorBox1 = *(int*)a;
|
||||
int indicatorBox2 = *(int*)b;
|
||||
|
@ -2519,7 +2594,7 @@ int indicatorBoxCompareByPosition(const void* a, const void* b)
|
|||
// Renders indicator boxes into the indicator bar window.
|
||||
//
|
||||
// 0x461648
|
||||
void indicatorBarRender(int count)
|
||||
static void indicatorBarRender(int count)
|
||||
{
|
||||
if (gIndicatorBarWindow == -1) {
|
||||
return;
|
||||
|
@ -2572,7 +2647,7 @@ void indicatorBarRender(int count)
|
|||
// space in the indicator bar.
|
||||
//
|
||||
// 0x4616F0
|
||||
bool indicatorBarAdd(int indicator)
|
||||
static bool indicatorBarAdd(int indicator)
|
||||
{
|
||||
for (int index = 0; index < INDICATOR_SLOTS_COUNT; index++) {
|
||||
if (gIndicatorSlots[index] == -1) {
|
||||
|
|
174
src/interface.h
174
src/interface.h
|
@ -1,9 +1,7 @@
|
|||
#ifndef INTERFACE_H
|
||||
#define INTERFACE_H
|
||||
|
||||
#include "art.h"
|
||||
#include "db.h"
|
||||
#include "geometry.h"
|
||||
#include "obj_types.h"
|
||||
|
||||
typedef enum Hand {
|
||||
|
@ -14,6 +12,12 @@ typedef enum Hand {
|
|||
HAND_COUNT,
|
||||
} Hand;
|
||||
|
||||
#define INDICATOR_BOX_WIDTH 130
|
||||
#define INDICATOR_BOX_HEIGHT 21
|
||||
|
||||
#define INTERFACE_BAR_WIDTH 640
|
||||
#define INTERFACE_BAR_HEIGHT 100
|
||||
|
||||
typedef enum InterfaceItemAction {
|
||||
INTERFACE_ITEM_ACTION_DEFAULT = -1,
|
||||
INTERFACE_ITEM_ACTION_USE,
|
||||
|
@ -25,156 +29,7 @@ typedef enum InterfaceItemAction {
|
|||
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();
|
||||
|
@ -203,24 +58,7 @@ 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();
|
||||
|
||||
|
|
Loading…
Reference in New Issue