Files
source/HelpScreen.cpp
majcostaandGitHub 24425a82b1 More unused stuff removal (#49)
* More unused stuff removal

delete:
- giant 'metaheaders' (JA2 All.h, Laptop All.h, etc), preferring to add #includes directly where needed
- unused ExceptionHandling and DbMan translation units
- unused WizShare.h, Bitmap.h, trle.h, video_private.h headers

* remove mentions from vc proj files too

* remove preprocessor conditionals for unused definitions

find . -iname '*.h' -o -iname '*.cpp' -exec unifdef.exe -m -UPRECOMPILED_HEADERS -UJA2_PRECOMPILED_HEADERS -UWIZ8_PRECOMPILED_HEADERS -UPRECOMPILEDHEADERS {} ';'

then manually fixed a couple files the tool errored out on

* yes, the comments too

as title
2023-01-03 15:51:48 +02:00

2563 lines
73 KiB
C++

#include "sgp.h"
#include "sysutil.h"
#include "vobject_blitters.h"
#include "wcheck.h"
#include "cursors.h"
#include "font control.h"
#include "cursor control.h"
#include "render dirty.h"
#include "Text.h"
#include "Utilities.h"
#include "WordWrap.h"
#include "Font Control.h"
#include "text.h"
#include "HelpScreen.h"
#include "HelpScreenText.h"
#include "Line.h"
#include "Game Clock.h"
#include "GameSettings.h"
#include "laptop.h"
#include "Text Input.h"
#include "english.h"
#include "renderworld.h"
#include "Game Init.h"
#include "Overhead.h"
extern INT16 gsVIEWPORT_END_Y;
extern void PrintDate( void );
extern void PrintNumberOnTeam( void );
extern void PrintBalance( void );
extern BOOLEAN fMapScreenBottomDirty;
extern BOOLEAN fCharacterInfoPanelDirty;
extern BOOLEAN fTeamPanelDirty;
extern BOOLEAN fMapScreenBottomDirty;
extern BOOLEAN fMapPanelDirty;
extern BOOLEAN gfGamePaused;
extern BOOLEAN fShowMapInventoryPool;
extern BOOLEAN BltVSurfaceUsingDD( HVSURFACE hDestVSurface, HVSURFACE hSrcVSurface, UINT32 fBltFlags, INT32 iDestX, INT32 iDestY, RECT *SrcRect );
#define HELP_SCREEN_ACTIVE 0x00000001
//The defualt size and placement of the screen
//#define HELP_SCREEN_DEFUALT_LOC_X 155
//#define HELP_SCREEN_DEFUALT_LOC_Y 105
#define HELP_SCREEN_DEFUALT_LOC_WIDTH HELP_SCREEN_SMALL_LOC_WIDTH + HELP_SCREEN_BUTTON_BORDER_WIDTH
#define HELP_SCREEN_DEFUALT_LOC_HEIGHT 292//300
#define HELP_SCREEN_BUTTON_BORDER_WIDTH 92
#define HELP_SCREEN_SMALL_LOC_WIDTH 320
#define HELP_SCREEN_SMALL_LOC_HEIGHT HELP_SCREEN_DEFUALT_LOC_HEIGHT //224
#define HELP_SCREEN_BTN_OFFSET_X 11
#define HELP_SCREEN_BTN_OFFSET_Y 12//50
#define HELP_SCREEN_BTN_FONT_ON_COLOR 73
#define HELP_SCREEN_BTN_FONT_OFF_COLOR FONT_MCOLOR_WHITE
#define HELP_SCREEN_BTN_FONT_BACK_COLOR 50
#define HELP_SCREEN_BTN_FONT FONT10ARIAL
#define HELP_SCREEN_BTN_WIDTH 77
#define HELP_SCREEN_BTN_HEIGHT 22
#define HELP_SCREEN_GAP_BN_BTNS 8
#define HELP_SCREEN_MARGIN_SIZE 10
#define HELP_SCREEN_TEXT_RIGHT_MARGIN_SPACE 36
#define HELP_SCREEN_TEXT_LEFT_MARGIN_WITH_BTN ( HELP_SCREEN_BUTTON_BORDER_WIDTH + 5 + HELP_SCREEN_MARGIN_SIZE )
#define HELP_SCREEN_TEXT_LEFT_MARGIN ( 5 + HELP_SCREEN_MARGIN_SIZE )
#define HELP_SCREEN_TEXT_OFFSET_Y 48
#define HELP_SCREEN_GAP_BTN_LINES 2
#define HELP_SCREEN_TITLE_BODY_FONT FONT12ARIAL
#define HELP_SCREEN_TITLE_BODY_COLOR FONT_MCOLOR_WHITE//FONT_NEARBLACK
#define HELP_SCREEN_TEXT_BODY_FONT FONT10ARIAL
#define HELP_SCREEN_TEXT_BODY_COLOR FONT_MCOLOR_WHITE//FONT_NEARBLACK
#define HELP_SCREEN_TEXT_BACKGROUND 0//NO_SHADOW//FONT_MCOLOR_WHITE
#define HELP_SCREEN_TITLE_OFFSET_Y 7
#define HELP_SCREEN_HELP_REMINDER_Y HELP_SCREEN_TITLE_OFFSET_Y + 15
#define HELP_SCREEN_NUM_BTNS 8
#define HELP_SCREEN_SHOW_HELP_AGAIN_REGION_OFFSET_X 4
#define HELP_SCREEN_SHOW_HELP_AGAIN_REGION_OFFSET_Y 18
#define HELP_SCREEN_SHOW_HELP_AGAIN_REGION_TEXT_OFFSET_X 25 + HELP_SCREEN_SHOW_HELP_AGAIN_REGION_OFFSET_X
#define HELP_SCREEN_SHOW_HELP_AGAIN_REGION_TEXT_OFFSET_Y ( HELP_SCREEN_SHOW_HELP_AGAIN_REGION_OFFSET_Y )
#define HELP_SCREEN_EXIT_BTN_OFFSET_X 291
#define HELP_SCREEN_EXIT_BTN_LOC_Y 9
#define HELP_SCREEN_
//the type of help screen
#define HLP_SCRN_DEFAULT_TYPE 9
#define HLP_SCRN_BUTTON_BORDER 8
//this is the size of the text buffer where everything will be blitted.
// 2 ( bytest for char ) * width of buffer * height of 1 line * # of text lines
//#define HLP_SCRN__NUMBER_BYTES_IN_TEXT_BUFFER ( 2 * HLP_SCRN__WIDTH_OF_TEXT_BUFFER * HLP_SCRN__HEIGHT_OF_1_LINE_IN_BUFFER * HLP_SCRN__MAX_NUMBER_OF_LINES_IN_BUFFER )
#define HLP_SCRN__WIDTH_OF_TEXT_BUFFER 280
#define HLP_SCRN__MAX_NUMBER_OF_LINES_IN_BUFFER 170//100
#define HLP_SCRN__HEIGHT_OF_1_LINE_IN_BUFFER ( GetFontHeight( HELP_SCREEN_TEXT_BODY_FONT ) + HELP_SCREEN_GAP_BTN_LINES )
#define HLP_SCRN__MAX_NUMBER_PIXELS_DISPLAYED_IN_TEXT_BUFFER HELP_SCREEN_DEFUALT_LOC_HEIGHT
#define HLP_SCRN__HEIGHT_OF_TEXT_BUFFER ( HLP_SCRN__HEIGHT_OF_1_LINE_IN_BUFFER * HLP_SCRN__MAX_NUMBER_OF_LINES_IN_BUFFER )
#define HLP_SCRN__MAX_NUMBER_DISPLAYED_LINES_IN_BUFFER ( HLP_SCRN__HEIGHT_OF_TEXT_AREA / HLP_SCRN__HEIGHT_OF_1_LINE_IN_BUFFER )
#define HLP_SCRN__HEIGHT_OF_TEXT_AREA 228
#define HLP_SCRN__HEIGHT_OF_SCROLL_AREA 182
#define HLP_SCRN__WIDTH_OF_SCROLL_AREA 20
#define HLP_SCRN__SCROLL_POSX 292
#define HLP_SCRN__SCROLL_POSY ( gHelpScreen.usScreenLocY + 63 )
#define HLP_SCRN__SCROLL_UP_ARROW_X 292
#define HLP_SCRN__SCROLL_UP_ARROW_Y 43
#define HLP_SCRN__SCROLL_DWN_ARROW_X HLP_SCRN__SCROLL_UP_ARROW_X
#define HLP_SCRN__SCROLL_DWN_ARROW_Y HLP_SCRN__SCROLL_UP_ARROW_Y + 202
//enums for the different dirty levels
enum
{
HLP_SCRN_DRTY_LVL_NOT_DIRTY,
HLP_SCRN_DRTY_LVL_REFRESH_TEXT,
HLP_SCRN_DRTY_LVL_REFRESH_ALL,
};
//new screen:
enum
{
HLP_SCRN_MPSCRN_SCTR_OVERVIEW,
};
//mapscreen, welcome to arulco
enum
{
HLP_SCRN_MPSCRN_OVERVIEW,
HLP_SCRN_MPSCRN_ASSIGNMENTS,
HLP_SCRN_MPSCRN_DESTINATIONS,
HLP_SCRN_MPSCRN_MAP,
HLP_SCRN_MPSCRN_MILITIA,
HLP_SCRN_MPSCRN_AIRSPACE,
HLP_SCRN_MPSCRN_ITEMS,
HLP_SCRN_MPSCRN_KEYBOARD,
HLP_SCRN_NUM_MPSCRN_BTNS,
};
//laptop sub pages
enum
{
HLP_SCRN_LPTP_OVERVIEW,
HLP_SCRN_LPTP_EMAIL,
HLP_SCRN_LPTP_WEB,
HLP_SCRN_LPTP_FILES,
HLP_SCRN_LPTP_HISTORY,
HLP_SCRN_LPTP_PERSONNEL,
HLP_SCRN_LPTP_FINANCIAL,
HLP_SCRN_LPTP_MERC_STATS,
HLP_SCRN_LPTP_NUM_PAGES,
};
//Mapscreen no one hired yet pages
enum
{
HLP_SCRN_NO_ONE_HIRED,
HLP_SCRN_NUM_MAPSCREEN_NO_1_HIRED_YET_PAGES,
};
//mapscreen no 1 hired yet pages
enum
{
HLP_SCRN_NOT_IN_ARULCO,
HLP_SCRN_NUM_NOT_IN_ARULCO_PAGES,
};
//Tactical
enum
{
HLP_SCRN_TACTICAL_OVERVIEW,
HLP_SCRN_TACTICAL_MOVEMENT,
HLP_SCRN_TACTICAL_SIGHT,
HLP_SCRN_TACTICAL_ATTACKING,
HLP_SCRN_TACTICAL_ITEMS,
HLP_SCRN_TACTICAL_KEYBOARD,
HLP_SCRN_NUM_TACTICAL_PAGES,
};
//ddd
HELP_SCREEN_STRUCT gHelpScreen;
typedef struct
{
INT32 iButtonTextNum[ HELP_SCREEN_NUM_BTNS ];
} HELP_SCREEN_BTN_TEXT_RECORD;
//An array of record nums for the text on the help buttons
HELP_SCREEN_BTN_TEXT_RECORD gHelpScreenBtnTextRecordNum[ HELP_SCREEN_NUMBER_OF_HELP_SCREENS ] =
{
//new screen:
//Laptop button record nums
// HELP_SCREEN_LAPTOP,
{ HLP_TXT_LAPTOP_BUTTON_1,
HLP_TXT_LAPTOP_BUTTON_2,
HLP_TXT_LAPTOP_BUTTON_3,
HLP_TXT_LAPTOP_BUTTON_4,
HLP_TXT_LAPTOP_BUTTON_5,
HLP_TXT_LAPTOP_BUTTON_6,
HLP_TXT_LAPTOP_BUTTON_7,
HLP_TXT_LAPTOP_BUTTON_8, },
// HELP_SCREEN_MAPSCREEN,
{ HLP_TXT_WELCOM_TO_ARULCO_BUTTON_1,
HLP_TXT_WELCOM_TO_ARULCO_BUTTON_2,
HLP_TXT_WELCOM_TO_ARULCO_BUTTON_3,
HLP_TXT_WELCOM_TO_ARULCO_BUTTON_4,
HLP_TXT_WELCOM_TO_ARULCO_BUTTON_5,
HLP_TXT_WELCOM_TO_ARULCO_BUTTON_6,
HLP_TXT_WELCOM_TO_ARULCO_BUTTON_7,
HLP_TXT_WELCOM_TO_ARULCO_BUTTON_8, },
// HELP_SCREEN_MAPSCREEN_NO_ONE_HIRED,
{ -1, -1, -1, -1, -1, -1, -1, -1, },
// HELP_SCREEN_MAPSCREEN_NOT_IN_ARULCO,
{ -1, -1, -1, -1, -1, -1, -1, -1, },
// HELP_SCREEN_MAPSCREEN_SECTOR_INVENTORY,
{ -1, -1, -1, -1, -1, -1, -1, -1, },
// HELP_SCREEN_TACTICAL,
{ HLP_TXT_TACTICAL_BUTTON_1,
HLP_TXT_TACTICAL_BUTTON_2,
HLP_TXT_TACTICAL_BUTTON_3,
HLP_TXT_TACTICAL_BUTTON_4,
HLP_TXT_TACTICAL_BUTTON_5,
HLP_TXT_TACTICAL_BUTTON_6,
-1, -1, },
// HELP_SCREEN_OPTIONS,
{ -1, -1, -1, -1, -1, -1, -1, -1, },
// HELP_SCREEN_LOAD_GAME,
{ -1, -1, -1, -1, -1, -1, -1, -1, },
};
BOOLEAN gfHelpScreenEntry = TRUE;
BOOLEAN gfHelpScreenExit = FALSE;
UINT32 guiHelpScreenBackGround;
UINT32 guiHelpScreenTextBufferSurface;
BOOLEAN gfScrollBoxIsScrolling = FALSE;
BOOLEAN gfHaveRenderedFirstFrameToSaveBuffer=FALSE;
// must use this cause you have ur cursor over a button when entering the help screen, the button will burn though.
//It does this cause that region loses it focus so it draws the button again.
UINT8 gubRenderHelpScreenTwiceInaRow=0;
//mmm
// region to mask the background
MOUSE_REGION gHelpScreenFullScreenMask;
//void SelectHelpTextFullScreenMaskCallBack(MOUSE_REGION * pRegion, INT32 iReason );
// region to mask the background
MOUSE_REGION gHelpScreenScrollArea;
void SelectHelpScrollAreaMovementCallBack( MOUSE_REGION * pRegion, INT32 iReason );
void SelectHelpScrollAreaCallBack( MOUSE_REGION * pRegion, INT32 iReason );
// region to mask the background
MOUSE_REGION gHelpScreenScrollAreaArrows;
void SelectHelpScrollAreaArrowsCallBack( MOUSE_REGION * pRegion, INT32 iReason );
//checkbox to toggle show help again toggle
UINT32 gHelpScreenDontShowHelpAgainToggle;
void BtnHelpScreenDontShowHelpAgainCallback(GUI_BUTTON *btn,INT32 reason);
//MOUSE_REGION HelpScreenDontShowHelpAgainToggleTextRegion;
//void HelpScreenDontShowHelpAgainToggleTextRegionCallBack(MOUSE_REGION * pRegion, INT32 iReason );
INT32 giHelpScreenButtonsImage[ HELP_SCREEN_NUM_BTNS ];
UINT32 guiHelpScreenBtns[ HELP_SCREEN_NUM_BTNS ];
void BtnHelpScreenBtnsCallback(GUI_BUTTON *btn,INT32 reason);
INT32 giExitBtnImage;
UINT32 guiHelpScreenExitBtn;
void BtnHelpScreenExitCallback(GUI_BUTTON *btn,INT32 reason);
INT32 giHelpScreenScrollArrows[2];
UINT32 guiHelpScreenScrollArrowImage[2];
void BtnHelpScreenScrollArrowsCallback(GUI_BUTTON *btn,INT32 reason);
//ggg
BOOLEAN EnterHelpScreen();
void HandleHelpScreen();
void RenderHelpScreen();
void ExitHelpScreen();
void GetHelpScreenUserInput();
void HelpScreenSpecialExitCode();
void SetSizeAndPropertiesOfHelpScreen();
BOOLEAN DrawHelpScreenBackGround();
void PrepareToExitHelpScreen();
void SpecialHandlerCode();
UINT16 RenderSpecificHelpScreen();
UINT16 RenderLaptopHelpScreen();
UINT16 RenderTacticalHelpScreen();
UINT16 RenderMapScreenHelpScreen();
UINT16 RenderMapScreenNoOneHiredYetHelpScreen();
UINT16 RenderMapScreenNotYetInArulcoHelpScreen();
UINT16 RenderMapScreenSectorInventoryHelpScreen();
void GetHelpScreenTextPositions( UINT16 *pusPosX, UINT16 *pusPosY, UINT16 *pusWidth );
void DisplayCurrentScreenTitleAndFooter();
void GetHelpScreenText( UINT32 uiRecordToGet, STR16 pText );
UINT16 GetAndDisplayHelpScreenText( UINT32 uiRecord, UINT16 usPosX, UINT16 usPosY, UINT16 usWidth );
void CreateHelpScreenButtons();
void RefreshAllHelpScreenButtons();
void RenderTextBufferToScreen();
void RenderCurrentHelpScreenTextToBuffer();
void DestroyHelpScreenTextBuffer();
BOOLEAN CreateHelpScreenTextBuffer();
void ChangeHelpScreenSubPage();
void ClearHelpScreenTextBuffer();
void ChangeTopLineInTextBufferByAmount( INT32 iAmouontToMove );
void DisplayHelpScreenTextBufferScrollBox();
void CalculateHeightAndPositionForHelpScreenScrollBox( INT32 *piHeightOfScrollBox, INT32 *iTopOfScrollBox );
void HelpScreenMouseMoveScrollBox( INT32 usMousePosY );
void CreateScrollAreaButtons();
void DeleteScrollArrowButtons();
void ChangeToHelpScreenSubPage( INT8 bNewPage );
BOOLEAN AreWeClickingOnScrollBar( INT32 usMousePosY );
//ppp
void InitHelpScreenSystem()
{
//set some values
memset( &gHelpScreen, 0, sizeof( gHelpScreen ) );
//set it up so we can enter the screen
gfHelpScreenEntry = TRUE;
gfHelpScreenExit = FALSE;
gHelpScreen.bCurrentHelpScreenActiveSubPage = -1;
gHelpScreen.fHaveAlreadyBeenInHelpScreenSinceEnteringCurrenScreen = FALSE;
}
BOOLEAN ShouldTheHelpScreenComeUp( UINT8 ubScreenID, BOOLEAN fForceHelpScreenToComeUp )
{
//if the screen is being forsced to come up ( user pressed 'h' )
if( fForceHelpScreenToComeUp )
{
//Set thefact that the user broughtthe help screen up
gHelpScreen.fForceHelpScreenToComeUp = TRUE;
goto HELP_SCREEN_SHOULD_COME_UP;
}
//if we are already in the help system, return true
if( gHelpScreen.uiFlags & HELP_SCREEN_ACTIVE )
{
return( TRUE );
}
//has the player been in the screen before
if( ( gHelpScreen.usHasPlayerSeenHelpScreenInCurrentScreen >> ubScreenID ) & 0x01 )
{
goto HELP_SCREEN_WAIT_1_FRAME;
}
//if we have already been in the screen, and the user DIDNT press 'h', leave
if( gHelpScreen.fHaveAlreadyBeenInHelpScreenSinceEnteringCurrenScreen )
{
return( FALSE );
}
//should the screen come up, based on the users choice for it automatically coming up
// if( !( gHelpScreen.fHideHelpInAllScreens ) )
{
// goto HELP_SCREEN_WAIT_1_FRAME;
}
//the help screen shouldnt come up
return( FALSE );
HELP_SCREEN_WAIT_1_FRAME:
// we have to wait 1 frame while the screen renders
if( gHelpScreen.bDelayEnteringHelpScreenBy1FrameCount < 2 )
{
gHelpScreen.bDelayEnteringHelpScreenBy1FrameCount += 1;
UnmarkButtonsDirty( );
return( FALSE );
}
HELP_SCREEN_SHOULD_COME_UP:
//Record which screen it is
//if its mapscreen
if( ubScreenID == HELP_SCREEN_MAPSCREEN )
{
//determine which screen it is ( is any mercs hired, did game just start )
gHelpScreen.bCurrentHelpScreen = HelpScreenDetermineWhichMapScreenHelpToShow();
}
else
{
gHelpScreen.bCurrentHelpScreen = ubScreenID;
}
//mark it that the help screnn is enabled
gHelpScreen.uiFlags |= HELP_SCREEN_ACTIVE;
// reset
gHelpScreen.bDelayEnteringHelpScreenBy1FrameCount = 0;
return( TRUE );
}
void HelpScreenHandler()
{
//if we are just entering the help screen
if( gfHelpScreenEntry )
{
//setup the help screen
EnterHelpScreen();
gfHelpScreenEntry = FALSE;
gfHelpScreenExit = FALSE;
}
RestoreBackgroundRects();
//get the mouse and keyboard inputs
GetHelpScreenUserInput();
//handle the help screen
HandleHelpScreen();
//if the help screen is dirty, re-render it
if( gHelpScreen.ubHelpScreenDirty != HLP_SCRN_DRTY_LVL_NOT_DIRTY )
{
//temp
// gHelpScreen.ubHelpScreenDirty = HLP_SCRN_DRTY_LVL_REFRESH_ALL;
RenderHelpScreen();
gHelpScreen.ubHelpScreenDirty = HLP_SCRN_DRTY_LVL_NOT_DIRTY;
}
// render buttons marked dirty
// MarkButtonsDirty( );
RenderButtons( );
SaveBackgroundRects( );
RenderButtonsFastHelp();
ExecuteBaseDirtyRectQueue();
EndFrameBufferRender();
//if we are leaving the help screen
if( gfHelpScreenExit )
{
gfHelpScreenExit = FALSE;
gfHelpScreenEntry = TRUE;
//exit mouse regions etc..
ExitHelpScreen();
//reset the helpscreen id
gHelpScreen.bCurrentHelpScreen = -1;
}
}
BOOLEAN EnterHelpScreen()
{
VOBJECT_DESC VObjectDesc;
UINT16 usPosX, usPosY;//, usWidth, usHeight;
// INT32 iStartLoc;
// CHAR16 zText[1024];
//Clear out all the save background rects
EmptyBackgroundRects( );
UnmarkButtonsDirty( );
// remeber if the game was paused or not ( so when we exit we know what to do )
gHelpScreen.fWasTheGamePausedPriorToEnteringHelpScreen = gfGamePaused;
//pause the game
PauseGame( );
//Determine the help screen size, based off the help screen
SetSizeAndPropertiesOfHelpScreen();
//Create a mouse region 'mask' the entrire screen
MSYS_DefineRegion( &gHelpScreenFullScreenMask, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, MSYS_PRIORITY_HIGHEST,
gHelpScreen.usCursor, MSYS_NO_CALLBACK, MSYS_NO_CALLBACK );
MSYS_AddRegion( &gHelpScreenFullScreenMask );
//Create the exit button
if( gHelpScreen.bNumberOfButtons != 0 )
usPosX = gHelpScreen.usScreenLocX + HELP_SCREEN_EXIT_BTN_OFFSET_X + HELP_SCREEN_BUTTON_BORDER_WIDTH;
else
usPosX = gHelpScreen.usScreenLocX + HELP_SCREEN_EXIT_BTN_OFFSET_X;
usPosY = gHelpScreen.usScreenLocY + HELP_SCREEN_EXIT_BTN_LOC_Y;
//Create the exit buttons
giExitBtnImage = LoadButtonImage("INTERFACE\\HelpScreen.sti", -1,0,4,2,6 );
guiHelpScreenExitBtn = CreateIconAndTextButton( giExitBtnImage, L"", HELP_SCREEN_BTN_FONT,
HELP_SCREEN_BTN_FONT_ON_COLOR, DEFAULT_SHADOW,
HELP_SCREEN_BTN_FONT_OFF_COLOR, DEFAULT_SHADOW,
TEXT_CJUSTIFIED,
usPosX, usPosY, BUTTON_TOGGLE, MSYS_PRIORITY_HIGHEST,
DEFAULT_MOVE_CALLBACK, BtnHelpScreenExitCallback );
SetButtonFastHelpText( guiHelpScreenExitBtn, gzHelpScreenText[HLP_SCRN_TXT__EXIT_SCREEN] );
SetButtonCursor( guiHelpScreenExitBtn, gHelpScreen.usCursor);
//Create the buttons needed for the screen
CreateHelpScreenButtons();
//if there are buttons
if( gHelpScreen.bNumberOfButtons != 0 )
usPosX = gHelpScreen.usScreenLocX + HELP_SCREEN_SHOW_HELP_AGAIN_REGION_OFFSET_X + HELP_SCREEN_BUTTON_BORDER_WIDTH;
else
usPosX = gHelpScreen.usScreenLocX + HELP_SCREEN_SHOW_HELP_AGAIN_REGION_OFFSET_X;
usPosY = gHelpScreen.usScreenLocY + gHelpScreen.usScreenHeight - HELP_SCREEN_SHOW_HELP_AGAIN_REGION_OFFSET_Y;
if( !gHelpScreen.fForceHelpScreenToComeUp)
{
gHelpScreenDontShowHelpAgainToggle = CreateCheckBoxButton( usPosX, (UINT16)(usPosY-3),
"INTERFACE\\OptionsCheckBoxes.sti", MSYS_PRIORITY_HIGHEST,
BtnHelpScreenDontShowHelpAgainCallback );
SetButtonCursor( gHelpScreenDontShowHelpAgainToggle, gHelpScreen.usCursor );
// Set the state of the chec box
if( gGameSettings.fHideHelpInAllScreens )
ButtonList[ gHelpScreenDontShowHelpAgainToggle ]->uiFlags |= BUTTON_CLICKED_ON;
else
ButtonList[ gHelpScreenDontShowHelpAgainToggle ]->uiFlags &= ~BUTTON_CLICKED_ON;
}
/*
///creatre a region for the text that says ' [ x ] click to continue seeing ....'
iStartLoc = HELPSCREEN_RECORD_SIZE * HLP_TXT_CONSTANT_FOOTER;
LoadEncryptedDataFromFile(HELPSCREEN_FILE, zText, iStartLoc, HELPSCREEN_RECORD_SIZE );
usWidth = StringPixLength( zText, HELP_SCREEN_TEXT_BODY_FONT );
usHeight = GetFontHeight( HELP_SCREEN_TEXT_BODY_FONT );
/*
MSYS_DefineRegion( &HelpScreenDontShowHelpAgainToggleTextRegion, usPosX, usPosY, (UINT16)(usPosX+usWidth), (UINT16)(usPosY+usHeight), MSYS_PRIORITY_HIGHEST-1,
gHelpScreen.usCursor, MSYS_NO_CALLBACK, HelpScreenDontShowHelpAgainToggleTextRegionCallBack );
MSYS_AddRegion( &HelpScreenDontShowHelpAgainToggleTextRegion );
*/
// load the help screen background graphic and add it
VObjectDesc.fCreateFlags=VOBJECT_CREATE_FROMFILE;
FilenameForBPP("INTERFACE\\HelpScreen.sti", VObjectDesc.ImageFile);
CHECKF(AddVideoObject(&VObjectDesc, &guiHelpScreenBackGround));
//create the text buffer
CreateHelpScreenTextBuffer();
//make sure we redraw everything
gHelpScreen.ubHelpScreenDirty = HLP_SCRN_DRTY_LVL_REFRESH_ALL;
//mark it that we have been in since we enter the current screen
gHelpScreen.fHaveAlreadyBeenInHelpScreenSinceEnteringCurrenScreen = TRUE;
//set the fact that we have been to the screen
gHelpScreen.usHasPlayerSeenHelpScreenInCurrentScreen &= ~( 1 << gHelpScreen.bCurrentHelpScreen );
//always start at the top
gHelpScreen.iLineAtTopOfTextBuffer = 0;
//set it so there was no previous click
gHelpScreen.iLastMouseClickY = -1;
//Create the scroll box, and scroll arrow regions/buttons
CreateScrollAreaButtons();
//render the active page to the text buffer
ChangeHelpScreenSubPage();
//reset scroll box flag
gfScrollBoxIsScrolling = FALSE;
//reset first frame buffer
gfHaveRenderedFirstFrameToSaveBuffer = FALSE;
gubRenderHelpScreenTwiceInaRow = 0;
return( TRUE );
}
void HandleHelpScreen()
{
//if any of the possible screens need to have a some code done every loop.. its done in here
SpecialHandlerCode();
if( gfScrollBoxIsScrolling )
{
if( gfLeftButtonState )
{
HelpScreenMouseMoveScrollBox( gusMouseYPos );
}
else
{
gfScrollBoxIsScrolling = FALSE;
gHelpScreen.iLastMouseClickY = -1;
}
}
if( gubRenderHelpScreenTwiceInaRow < 3 )
{
//test
// gHelpScreen.ubHelpScreenDirty = HLP_SCRN_DRTY_LVL_REFRESH_ALL;
gubRenderHelpScreenTwiceInaRow++;
UnmarkButtonsDirty( );
}
// refresh all of help screens buttons
RefreshAllHelpScreenButtons();
}
void RenderHelpScreen()
{
//rrr
if( gfHaveRenderedFirstFrameToSaveBuffer )
{
//Restore the background before blitting the text back on
RestoreExternBackgroundRect( gHelpScreen.usScreenLocX, gHelpScreen.usScreenLocY, gHelpScreen.usScreenWidth, gHelpScreen.usScreenHeight );
}
if( gHelpScreen.ubHelpScreenDirty == HLP_SCRN_DRTY_LVL_REFRESH_ALL )
{
//Display the helpscreen background
DrawHelpScreenBackGround();
//Display the current screens title, and footer info
DisplayCurrentScreenTitleAndFooter();
}
if( !gfHaveRenderedFirstFrameToSaveBuffer )
{
gfHaveRenderedFirstFrameToSaveBuffer = TRUE;
//blit everything to the save buffer ( cause the save buffer can bleed through )
BlitBufferToBuffer(guiRENDERBUFFER, guiSAVEBUFFER, gHelpScreen.usScreenLocX, gHelpScreen.usScreenLocY, (UINT16)(gHelpScreen.usScreenWidth), (UINT16)(gHelpScreen.usScreenHeight) );
UnmarkButtonsDirty( );
}
//render the text buffer to the screen
if( gHelpScreen.ubHelpScreenDirty >= HLP_SCRN_DRTY_LVL_REFRESH_TEXT )
{
RenderTextBufferToScreen();
}
}
void ExitHelpScreen()
{
INT32 i;
if( !gHelpScreen.fForceHelpScreenToComeUp )
{
//Get the current value of the checkbox
if( ButtonList[ gHelpScreenDontShowHelpAgainToggle ]->uiFlags & BUTTON_CLICKED_ON )
{
gGameSettings.fHideHelpInAllScreens = TRUE;
gHelpScreen.usHasPlayerSeenHelpScreenInCurrentScreen = 0;
}
else
{
gGameSettings.fHideHelpInAllScreens = FALSE;
}
//remove the mouse region for the '[ ] dont show help...'
RemoveButton( gHelpScreenDontShowHelpAgainToggle );
}
//mark it that the help screen is not active
gHelpScreen.uiFlags &= ~HELP_SCREEN_ACTIVE;
//remove the mouse region that blankets
MSYS_RemoveRegion( &gHelpScreenFullScreenMask );
//checkbox to toggle show help again toggle
// MSYS_RemoveRegion( &HelpScreenDontShowHelpAgainToggleTextRegion );
//remove the hepl graphic
DeleteVideoObjectFromIndex( guiHelpScreenBackGround );
//remove the exit button
RemoveButton( guiHelpScreenExitBtn );
//if there are any buttons, remove them
if( gHelpScreen.bNumberOfButtons != 0 )
{
for( i=0; i< gHelpScreen.bNumberOfButtons; i++ )
{
UnloadButtonImage( giHelpScreenButtonsImage[i] );
RemoveButton( guiHelpScreenBtns[i] );
}
}
//destroy the text buffer for the help screen
DestroyHelpScreenTextBuffer();
//Handles the dirtying of any special screen we are about to reenter
HelpScreenSpecialExitCode();
//if the game was NOT paused
if( gHelpScreen.fWasTheGamePausedPriorToEnteringHelpScreen == FALSE )
{
//un pause the game
UnPauseGame( );
}
//Delete the scroll box, and scroll arrow regions/buttons
DeleteScrollArrowButtons();
//reset
gHelpScreen.fForceHelpScreenToComeUp = FALSE;
SaveGameSettings();
SaveFeatureFlags();
}
BOOLEAN DrawHelpScreenBackGround()
{
HVOBJECT hPixHandle;
UINT16 usPosX;
//Get and display the background image
GetVideoObject(&hPixHandle, guiHelpScreenBackGround );
usPosX = gHelpScreen.usScreenLocX;
//if there are buttons, blit the button border
if( gHelpScreen.bNumberOfButtons != 0 )
{
BltVideoObject(FRAME_BUFFER, hPixHandle, HLP_SCRN_BUTTON_BORDER, usPosX, gHelpScreen.usScreenLocY, VO_BLT_SRCTRANSPARENCY,NULL);
usPosX += HELP_SCREEN_BUTTON_BORDER_WIDTH;
}
BltVideoObject(FRAME_BUFFER, hPixHandle, HLP_SCRN_DEFAULT_TYPE, usPosX, gHelpScreen.usScreenLocY, VO_BLT_SRCTRANSPARENCY,NULL);
InvalidateRegion( gHelpScreen.usScreenLocX, gHelpScreen.usScreenLocY, gHelpScreen.usScreenLocX+gHelpScreen.usScreenWidth, gHelpScreen.usScreenLocY + gHelpScreen.usScreenHeight );
return( TRUE );
}
void SetSizeAndPropertiesOfHelpScreen()
{
//new screen:
gHelpScreen.bNumberOfButtons = 0;
//
//these are the default settings, so if the screen uses different then defualt, set them in the switch
//
{
gHelpScreen.usScreenWidth = HELP_SCREEN_DEFUALT_LOC_WIDTH;
gHelpScreen.usScreenHeight = HELP_SCREEN_DEFUALT_LOC_HEIGHT;
gHelpScreen.usScreenLocX = ( SCREEN_WIDTH - gHelpScreen.usScreenWidth ) / 2;
gHelpScreen.usScreenLocY = ( SCREEN_HEIGHT - gHelpScreen.usScreenHeight ) / 2;
gHelpScreen.bCurrentHelpScreenActiveSubPage = 0;
gHelpScreen.usCursor = CURSOR_NORMAL;
}
switch( gHelpScreen.bCurrentHelpScreen )
{
case HELP_SCREEN_LAPTOP:
gHelpScreen.bNumberOfButtons = HLP_SCRN_LPTP_NUM_PAGES;
gHelpScreen.usCursor = CURSOR_LAPTOP_SCREEN;
//center the screen inside the laptop screen
gHelpScreen.usScreenLocX = LAPTOP_SCREEN_UL_X + ( 502 - gHelpScreen.usScreenWidth ) / 2;
gHelpScreen.usScreenLocY = LAPTOP_SCREEN_UL_Y + ( LAPTOP_SCREEN_HEIGHT - gHelpScreen.usScreenHeight ) / 2;
break;
case HELP_SCREEN_MAPSCREEN:
gHelpScreen.bNumberOfButtons = HLP_SCRN_NUM_MPSCRN_BTNS;
//calc the center position based on the current panel thats being displayed
gHelpScreen.usScreenLocY = ( gsVIEWPORT_END_Y - gHelpScreen.usScreenHeight ) / 2;
break;
case HELP_SCREEN_TACTICAL:
gHelpScreen.bNumberOfButtons = HLP_SCRN_NUM_TACTICAL_PAGES;
//calc the center position based on the current panel thats being displayed
gHelpScreen.usScreenLocY = ( gsVIEWPORT_END_Y - gHelpScreen.usScreenHeight ) / 2;
break;
case HELP_SCREEN_MAPSCREEN_NO_ONE_HIRED:
case HELP_SCREEN_MAPSCREEN_NOT_IN_ARULCO:
case HELP_SCREEN_MAPSCREEN_SECTOR_INVENTORY:
gHelpScreen.usScreenWidth = HELP_SCREEN_SMALL_LOC_WIDTH;
gHelpScreen.usScreenHeight = HELP_SCREEN_SMALL_LOC_HEIGHT;
//calc screen position since we just set the width and height
gHelpScreen.usScreenLocX = ( SCREEN_WIDTH - gHelpScreen.usScreenWidth ) / 2;
//calc the center position based on the current panel thats being displayed
gHelpScreen.usScreenLocY = ( gsVIEWPORT_END_Y - gHelpScreen.usScreenHeight ) / 2;
gHelpScreen.bNumberOfButtons = 0;
gHelpScreen.bCurrentHelpScreenActiveSubPage = 0;
break;
case HELP_SCREEN_OPTIONS:
case HELP_SCREEN_LOAD_GAME:
break;
default:
#ifdef JA2BETAVERSION
AssertMsg( 0, "Error in help screen. DF 0" );
#else
break;
#endif
}
//if there are buttons
if( gHelpScreen.bNumberOfButtons != 0 )
gHelpScreen.usLeftMarginPosX = gHelpScreen.usScreenLocX + HELP_SCREEN_TEXT_LEFT_MARGIN_WITH_BTN;
else
gHelpScreen.usLeftMarginPosX = gHelpScreen.usScreenLocX + HELP_SCREEN_TEXT_LEFT_MARGIN;
}
void CreateHelpScreenButtons()
{
UINT16 usPosX, usPosY;
CHAR16 sText[1024];
INT32 i;
//if there are buttons to create
if( gHelpScreen.bNumberOfButtons != 0 )
{
usPosX = gHelpScreen.usScreenLocX + HELP_SCREEN_BTN_OFFSET_X;
usPosY = HELP_SCREEN_BTN_OFFSET_Y + gHelpScreen.usScreenLocY;
//loop through all the buttons, and create them
for( i=0; i< gHelpScreen.bNumberOfButtons; i++ )
{
//get the text for the button
GetHelpScreenText( gHelpScreenBtnTextRecordNum[ gHelpScreen.bCurrentHelpScreen ].iButtonTextNum[i], sText );
/*
guiHelpScreenBtns[i] = CreateTextButton( sText, HELP_SCREEN_BTN_FONT, HELP_SCREEN_BTN_FONT_COLOR, HELP_SCREEN_BTN_FONT_BACK_COLOR,
BUTTON_USE_DEFAULT, usPosX, usPosY, HELP_SCREEN_BTN_WIDTH, HELP_SCREEN_BTN_HEIGHT,
BUTTON_TOGGLE, MSYS_PRIORITY_HIGHEST, BUTTON_NO_CALLBACK, BtnHelpScreenBtnsCallback );
*/
giHelpScreenButtonsImage[i] = UseLoadedButtonImage( giExitBtnImage, -1,1,5,3,7 );
guiHelpScreenBtns[i] = CreateIconAndTextButton( giHelpScreenButtonsImage[i], sText, HELP_SCREEN_BTN_FONT,
HELP_SCREEN_BTN_FONT_ON_COLOR, DEFAULT_SHADOW,
HELP_SCREEN_BTN_FONT_OFF_COLOR, DEFAULT_SHADOW,
TEXT_CJUSTIFIED,
usPosX, usPosY, BUTTON_TOGGLE, MSYS_PRIORITY_HIGHEST,
DEFAULT_MOVE_CALLBACK, BtnHelpScreenBtnsCallback);
SetButtonCursor( guiHelpScreenBtns[i], gHelpScreen.usCursor);
MSYS_SetBtnUserData( guiHelpScreenBtns[i], 0, i);
// SpecifyButtonTextOffsets( guiHelpScreenBtns[i], 19, 9, TRUE );
usPosY += HELP_SCREEN_BTN_HEIGHT + HELP_SCREEN_GAP_BN_BTNS;
}
ButtonList[ guiHelpScreenBtns[0] ]->uiFlags |= BUTTON_CLICKED_ON;
}
}
void GetHelpScreenUserInput()
{
InputAtom Event;
POINT MousePos;
GetCursorPos(&MousePos);
ScreenToClient(ghWindow, &MousePos); // In window coords!
while( DequeueEvent( &Event ) )
{
// HOOK INTO MOUSE HOOKS
switch( Event.usEvent)
{
case LEFT_BUTTON_DOWN:
MouseSystemHook(LEFT_BUTTON_DOWN, (INT16)MousePos.x, (INT16)MousePos.y,_LeftButtonDown, _RightButtonDown);
break;
case LEFT_BUTTON_UP:
MouseSystemHook(LEFT_BUTTON_UP, (INT16)MousePos.x, (INT16)MousePos.y ,_LeftButtonDown, _RightButtonDown);
break;
case RIGHT_BUTTON_DOWN:
MouseSystemHook(RIGHT_BUTTON_DOWN, (INT16)MousePos.x, (INT16)MousePos.y,_LeftButtonDown, _RightButtonDown);
break;
case RIGHT_BUTTON_UP:
MouseSystemHook(RIGHT_BUTTON_UP, (INT16)MousePos.x, (INT16)MousePos.y,_LeftButtonDown, _RightButtonDown);
break;
case RIGHT_BUTTON_REPEAT:
MouseSystemHook(RIGHT_BUTTON_REPEAT, (INT16)MousePos.x, (INT16)MousePos.y,_LeftButtonDown, _RightButtonDown);
break;
case LEFT_BUTTON_REPEAT:
MouseSystemHook(LEFT_BUTTON_REPEAT, (INT16)MousePos.x, (INT16)MousePos.y,_LeftButtonDown, _RightButtonDown);
break;
}
if( !HandleTextInput( &Event ) && Event.usEvent == KEY_UP )
{
switch( Event.usParam )
{
case ESC:
PrepareToExitHelpScreen();
break;
case DNARROW:
{
ChangeTopLineInTextBufferByAmount( 1 );
}
break;
case UPARROW:
{
ChangeTopLineInTextBufferByAmount( -1 );
}
break;
case PGUP:
{
ChangeTopLineInTextBufferByAmount( -( HLP_SCRN__MAX_NUMBER_DISPLAYED_LINES_IN_BUFFER -1 ) );
}
break;
case PGDN:
{
ChangeTopLineInTextBufferByAmount( ( HLP_SCRN__MAX_NUMBER_DISPLAYED_LINES_IN_BUFFER -1 ) );
}
break;
case LEFTARROW:
ChangeToHelpScreenSubPage( (INT8)( gHelpScreen.bCurrentHelpScreenActiveSubPage - 1 ) );
break;
case RIGHTARROW:
ChangeToHelpScreenSubPage( (INT8)( gHelpScreen.bCurrentHelpScreenActiveSubPage + 1 ) );
break;
/*
case LEFTARROW:
{
}
break;
case RIGHTARROW:
{
}
break;
*/
#ifdef JA2TESTVERSION
//rerender the hepl screen
case 'r':
gHelpScreen.ubHelpScreenDirty = HLP_SCRN_DRTY_LVL_REFRESH_ALL;
break;
case 'i':
InvalidateRegion( 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT );
break;
case 'd':
InvalidateRegion( gHelpScreen.usScreenLocX, gHelpScreen.usScreenLocY, gHelpScreen.usScreenLocX+gHelpScreen.usScreenWidth, gHelpScreen.usScreenLocY + gHelpScreen.usScreenHeight );
break;
#endif
}
}
if( !HandleTextInput( &Event ) && Event.usEvent == KEY_REPEAT )
{
switch( Event.usParam )
{
case DNARROW:
{
ChangeTopLineInTextBufferByAmount( 1 );
}
break;
case UPARROW:
{
ChangeTopLineInTextBufferByAmount( -1 );
}
break;
case PGUP:
{
ChangeTopLineInTextBufferByAmount( -( HLP_SCRN__MAX_NUMBER_DISPLAYED_LINES_IN_BUFFER -1 ) );
}
break;
case PGDN:
{
ChangeTopLineInTextBufferByAmount( ( HLP_SCRN__MAX_NUMBER_DISPLAYED_LINES_IN_BUFFER -1 ) );
}
break;
}
}
}
}
//Handles anything spcial that must be done when exiting the specific screen we are about to reenter ( eg. dirtying of the screen )
void HelpScreenSpecialExitCode()
{
//switch on the current screen
switch( gHelpScreen.bCurrentHelpScreen )
{
case HELP_SCREEN_LAPTOP:
fReDrawScreenFlag = TRUE;
break;
case HELP_SCREEN_MAPSCREEN_NO_ONE_HIRED:
case HELP_SCREEN_MAPSCREEN_NOT_IN_ARULCO:
case HELP_SCREEN_MAPSCREEN_SECTOR_INVENTORY:
case HELP_SCREEN_MAPSCREEN:
fCharacterInfoPanelDirty = TRUE;
fTeamPanelDirty = TRUE;
fMapScreenBottomDirty = TRUE;
fMapPanelDirty=TRUE;
break;
case HELP_SCREEN_TACTICAL:
fInterfacePanelDirty = DIRTYLEVEL2;
SetRenderFlags(RENDER_FLAG_FULL);
break;
case HELP_SCREEN_OPTIONS:
break;
case HELP_SCREEN_LOAD_GAME:
break;
default:
#ifdef JA2BETAVERSION
AssertMsg( 0, "Error in help screen. DF 0" );
#else
break;
#endif
}
}
void PrepareToExitHelpScreen()
{
gfHelpScreenExit = TRUE;
}
//Handles anything special that must be done when exiting the specific screen we are about to reenter ( eg. dirtying of the screen )
void SpecialHandlerCode()
{
//switch on the current screen
switch( gHelpScreen.bCurrentHelpScreen )
{
case HELP_SCREEN_LAPTOP:
PrintDate( );
PrintBalance( );
PrintNumberOnTeam( );
break;
case HELP_SCREEN_MAPSCREEN:
break;
case HELP_SCREEN_TACTICAL:
break;
case HELP_SCREEN_MAPSCREEN_NO_ONE_HIRED:
break;
case HELP_SCREEN_MAPSCREEN_NOT_IN_ARULCO:
break;
case HELP_SCREEN_MAPSCREEN_SECTOR_INVENTORY:
break;
break;
case HELP_SCREEN_OPTIONS:
break;
case HELP_SCREEN_LOAD_GAME:
break;
default:
#ifdef JA2BETAVERSION
AssertMsg( 0, "Error in help screen: SpecialHandlerCode(). DF 0" );
#else
break;
#endif
}
}
UINT16 RenderSpecificHelpScreen()
{
UINT16 usNumVerticalPixelsDisplayed = 0;
//new screen:
//set the buffer for the text to go to
// SetFontDestBuffer( guiHelpScreenTextBufferSurface, gHelpScreen.usLeftMarginPosX, gHelpScreen.usScreenLocY + HELP_SCREEN_TEXT_OFFSET_Y,
// HLP_SCRN__WIDTH_OF_TEXT_BUFFER, HLP_SCRN__NUMBER_BYTES_IN_TEXT_BUFFER, FALSE );
SetFontDestBuffer( guiHelpScreenTextBufferSurface, 0, 0,
HLP_SCRN__WIDTH_OF_TEXT_BUFFER, HLP_SCRN__HEIGHT_OF_TEXT_BUFFER, FALSE );
//switch on the current screen
switch( gHelpScreen.bCurrentHelpScreen )
{
case HELP_SCREEN_LAPTOP:
usNumVerticalPixelsDisplayed = RenderLaptopHelpScreen();
break;
case HELP_SCREEN_MAPSCREEN:
usNumVerticalPixelsDisplayed = RenderMapScreenHelpScreen();
break;
case HELP_SCREEN_TACTICAL:
usNumVerticalPixelsDisplayed = RenderTacticalHelpScreen();
break;
case HELP_SCREEN_MAPSCREEN_NO_ONE_HIRED:
usNumVerticalPixelsDisplayed = RenderMapScreenNoOneHiredYetHelpScreen();
break;
case HELP_SCREEN_MAPSCREEN_NOT_IN_ARULCO:
usNumVerticalPixelsDisplayed = RenderMapScreenNotYetInArulcoHelpScreen();
break;
case HELP_SCREEN_MAPSCREEN_SECTOR_INVENTORY:
usNumVerticalPixelsDisplayed = RenderMapScreenSectorInventoryHelpScreen();
break;
case HELP_SCREEN_OPTIONS:
break;
case HELP_SCREEN_LOAD_GAME:
break;
default:
#ifdef JA2BETAVERSION
SetFontDestBuffer( FRAME_BUFFER, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, FALSE );
AssertMsg( 0, "Error in help screen: RenderSpecificHelpScreen(). DF 0" );
#else
break;
#endif
}
SetFontDestBuffer( FRAME_BUFFER, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, FALSE );
//add 1 line to the bottom of the buffer
usNumVerticalPixelsDisplayed += 10;
return( usNumVerticalPixelsDisplayed );
}
void GetHelpScreenTextPositions( UINT16 *pusPosX, UINT16 *pusPosY, UINT16 *pusWidth )
{
//if there are buttons
if( pusPosX != NULL )
*pusPosX = 0;
if( pusWidth != NULL )
*pusWidth = HLP_SCRN__WIDTH_OF_TEXT_BUFFER - 1 * HELP_SCREEN_MARGIN_SIZE; //DEF was 2
if( pusPosY != NULL )
*pusPosY = 0;
}
void DisplayCurrentScreenTitleAndFooter()
{
INT32 iStartLoc = -1;
CHAR16 zText[1024];
UINT16 usPosX=0, usPosY=0, usWidth=0;
//new screen:
//switch on the current screen
switch( gHelpScreen.bCurrentHelpScreen )
{
case HELP_SCREEN_LAPTOP:
iStartLoc = HELPSCREEN_RECORD_SIZE * HLP_TXT_LAPTOP_TITLE;
break;
case HELP_SCREEN_MAPSCREEN:
iStartLoc = HELPSCREEN_RECORD_SIZE * HLP_TXT_WELCOM_TO_ARULCO_TITLE;
break;
case HELP_SCREEN_TACTICAL:
iStartLoc = HELPSCREEN_RECORD_SIZE * HLP_TXT_TACTICAL_TITLE;
break;
case HELP_SCREEN_MAPSCREEN_NO_ONE_HIRED:
iStartLoc = HELPSCREEN_RECORD_SIZE * HLP_TXT_MPSCRN_NO_1_HIRED_YET_TITLE;
break;
case HELP_SCREEN_MAPSCREEN_NOT_IN_ARULCO:
iStartLoc = HELPSCREEN_RECORD_SIZE * HLP_TXT_MPSCRN_NOT_IN_ARULCO_TITLE;
break;
case HELP_SCREEN_MAPSCREEN_SECTOR_INVENTORY:
iStartLoc = HELPSCREEN_RECORD_SIZE * HLP_TXT_SECTOR_INVTRY_TITLE;
break;
case HELP_SCREEN_OPTIONS:
break;
case HELP_SCREEN_LOAD_GAME:
break;
default:
#ifdef JA2BETAVERSION
AssertMsg( 0, "Error in help screen: DisplayCurrentScreenTitleAndFooter(). DF 0" );
#else
break;
#endif
}
// GetHelpScreenTextPositions( NULL, NULL, &usWidth );
if( gHelpScreen.bNumberOfButtons != 0 )
usWidth = gHelpScreen.usScreenWidth - HELP_SCREEN_TEXT_LEFT_MARGIN_WITH_BTN - HELP_SCREEN_TEXT_RIGHT_MARGIN_SPACE;
else
usWidth = gHelpScreen.usScreenWidth - HELP_SCREEN_TEXT_LEFT_MARGIN - HELP_SCREEN_TEXT_RIGHT_MARGIN_SPACE;
//if this screen has a valid title
if( iStartLoc != -1 )
{
LoadEncryptedDataFromFile(HELPSCREEN_FILE, zText, iStartLoc, HELPSCREEN_RECORD_SIZE );
SetFontShadow( NO_SHADOW );
usPosX = gHelpScreen.usLeftMarginPosX;
// DrawTextToScreen( zText, usPosX, (UINT16)(gHelpScreen.usScreenLocY+HELP_SCREEN_TITLE_OFFSET_Y), usWidth,
// HELP_SCREEN_TITLE_BODY_FONT, HELP_SCREEN_TITLE_BODY_COLOR, HELP_SCREEN_TEXT_BACKGROUND, FALSE, CENTER_JUSTIFIED );
//Display the Title
IanDisplayWrappedString( usPosX, (UINT16)(gHelpScreen.usScreenLocY+HELP_SCREEN_TITLE_OFFSET_Y), usWidth, HELP_SCREEN_GAP_BTN_LINES,
HELP_SCREEN_TITLE_BODY_FONT, HELP_SCREEN_TITLE_BODY_COLOR, zText,
HELP_SCREEN_TEXT_BACKGROUND, FALSE, 0 );
}
//Display the '( press H to get help... )'
iStartLoc = HELPSCREEN_RECORD_SIZE * HLP_TXT_CONSTANT_SUBTITLE;
LoadEncryptedDataFromFile(HELPSCREEN_FILE, zText, iStartLoc, HELPSCREEN_RECORD_SIZE );
usPosX = gHelpScreen.usLeftMarginPosX;
usPosY = gHelpScreen.usScreenLocY+HELP_SCREEN_HELP_REMINDER_Y;
// DrawTextToScreen( zText, usPosX, usPosY, usWidth,
// HELP_SCREEN_TEXT_BODY_FONT, HELP_SCREEN_TITLE_BODY_COLOR, HELP_SCREEN_TEXT_BACKGROUND, FALSE, CENTER_JUSTIFIED );
IanDisplayWrappedString( usPosX, usPosY, usWidth, HELP_SCREEN_GAP_BTN_LINES,
HELP_SCREEN_TITLE_BODY_FONT, HELP_SCREEN_TITLE_BODY_COLOR, zText,
HELP_SCREEN_TEXT_BACKGROUND, FALSE, 0 );
if( !gHelpScreen.fForceHelpScreenToComeUp )
{
//calc location for the ' [ x ] Dont display again...'
iStartLoc = HELPSCREEN_RECORD_SIZE * HLP_TXT_CONSTANT_FOOTER;
LoadEncryptedDataFromFile(HELPSCREEN_FILE, zText, iStartLoc, HELPSCREEN_RECORD_SIZE );
usPosX = gHelpScreen.usLeftMarginPosX + HELP_SCREEN_SHOW_HELP_AGAIN_REGION_TEXT_OFFSET_X;
usPosY = gHelpScreen.usScreenLocY + gHelpScreen.usScreenHeight - HELP_SCREEN_SHOW_HELP_AGAIN_REGION_TEXT_OFFSET_Y + 2;
//Display the ' [ x ] Dont display again...'
IanDisplayWrappedString( usPosX, usPosY, usWidth, HELP_SCREEN_GAP_BTN_LINES,
HELP_SCREEN_TEXT_BODY_FONT, HELP_SCREEN_TITLE_BODY_COLOR, zText,
HELP_SCREEN_TEXT_BACKGROUND, FALSE, 0 );
}
SetFontShadow( DEFAULT_SHADOW );
}
void BtnHelpScreenBtnsCallback(GUI_BUTTON *btn,INT32 reason)
{
if(reason & MSYS_CALLBACK_REASON_LBUTTON_DWN )
{
// btn->uiFlags |= BUTTON_CLICKED_ON;
InvalidateRegion(btn->Area.RegionTopLeftX, btn->Area.RegionTopLeftY, btn->Area.RegionBottomRightX, btn->Area.RegionBottomRightY);
}
if(reason & MSYS_CALLBACK_REASON_LBUTTON_UP )
{
//Get the btn id
INT8 bRetValue = (UINT8)MSYS_GetBtnUserData( btn, 0 );
ChangeToHelpScreenSubPage( bRetValue );
/*
//change the current page to the new one
gHelpScreen.bCurrentHelpScreenActiveSubPage = ( bRetValue > gHelpScreen.bNumberOfButtons ) ? gHelpScreen.bNumberOfButtons-1 : bRetValue;
gHelpScreen.ubHelpScreenDirty = HLP_SCRN_DRTY_LVL_REFRESH_TEXT;
for( i=0; i< gHelpScreen.bNumberOfButtons; i++ )
{
ButtonList[ guiHelpScreenBtns[i] ]->uiFlags &= (~BUTTON_CLICKED_ON );
}
//change the current sub page, and render it to the buffer
ChangeHelpScreenSubPage();
*/
btn->uiFlags |= BUTTON_CLICKED_ON;
InvalidateRegion(btn->Area.RegionTopLeftX, btn->Area.RegionTopLeftY, btn->Area.RegionBottomRightX, btn->Area.RegionBottomRightY);
}
if(reason & MSYS_CALLBACK_REASON_LOST_MOUSE)
{
// btn->uiFlags &= (~BUTTON_CLICKED_ON );
InvalidateRegion(btn->Area.RegionTopLeftX, btn->Area.RegionTopLeftY, btn->Area.RegionBottomRightX, btn->Area.RegionBottomRightY);
}
}
void ChangeToHelpScreenSubPage( INT8 bNewPage )
{
INT8 i;
//if for some reason, we are assigning a lower number
if( bNewPage < 0 )
{
gHelpScreen.bCurrentHelpScreenActiveSubPage = 0;
}
//for some reason if the we are passing in a # that is greater then the max, set it to the max
else if( bNewPage >= gHelpScreen.bNumberOfButtons )
{
gHelpScreen.bCurrentHelpScreenActiveSubPage = ( gHelpScreen.bNumberOfButtons == 0 ) ? 0: gHelpScreen.bNumberOfButtons -1;
}
//if we are selecting the current su page, exit
else if( bNewPage == gHelpScreen.bCurrentHelpScreenActiveSubPage )
{
return;
}
//else assign the new subpage
else
{
gHelpScreen.bCurrentHelpScreenActiveSubPage = bNewPage;
}
//refresh the screen
gHelpScreen.ubHelpScreenDirty = HLP_SCRN_DRTY_LVL_REFRESH_TEXT;
//'undepress' all the buttons
for( i=0; i< gHelpScreen.bNumberOfButtons; i++ )
{
ButtonList[ guiHelpScreenBtns[i] ]->uiFlags &= (~BUTTON_CLICKED_ON );
}
//depress the proper button
ButtonList[ guiHelpScreenBtns[ gHelpScreen.bCurrentHelpScreenActiveSubPage ] ]->uiFlags |= BUTTON_CLICKED_ON;
//change the current sub page, and render it to the buffer
ChangeHelpScreenSubPage();
}
void GetHelpScreenText( UINT32 uiRecordToGet, STR16 pText )
{
INT32 iStartLoc = -1;
iStartLoc = HELPSCREEN_RECORD_SIZE * uiRecordToGet;
LoadEncryptedDataFromFile(HELPSCREEN_FILE, pText, iStartLoc, HELPSCREEN_RECORD_SIZE );
}
//returns the number of vertical pixels printed
UINT16 GetAndDisplayHelpScreenText( UINT32 uiRecord, UINT16 usPosX, UINT16 usPosY, UINT16 usWidth )
{
CHAR16 zText[1024];
UINT16 usNumVertPixels = 0;
UINT32 uiStartLoc;
SetFontShadow( NO_SHADOW );
GetHelpScreenText( uiRecord, zText );
//Get the record
uiStartLoc = HELPSCREEN_RECORD_SIZE * uiRecord;
LoadEncryptedDataFromFile(HELPSCREEN_FILE, zText, uiStartLoc, HELPSCREEN_RECORD_SIZE );
//Display the text
usNumVertPixels = IanDisplayWrappedString( usPosX, usPosY, usWidth, HELP_SCREEN_GAP_BTN_LINES,
HELP_SCREEN_TEXT_BODY_FONT, HELP_SCREEN_TEXT_BODY_COLOR, zText,
HELP_SCREEN_TEXT_BACKGROUND, FALSE, 0 );
SetFontShadow( DEFAULT_SHADOW );
return( usNumVertPixels );
}
void BtnHelpScreenDontShowHelpAgainCallback( GUI_BUTTON *btn, INT32 reason )
{
// UINT8 ubButton = (UINT8)MSYS_GetBtnUserData( btn, 0 );
if( reason & MSYS_CALLBACK_REASON_LBUTTON_UP )
{
}
else if( reason & MSYS_CALLBACK_REASON_LBUTTON_DWN )
{
/*
btn->uiFlags &= ~BUTTON_CLICKED_ON;
if( gHelpScreen.usHasPlayerSeenHelpScreenInCurrentScreen & ( 1 << gHelpScreen.bCurrentHelpScreen ) )
{
//
gHelpScreen.usHasPlayerSeenHelpScreenInCurrentScreen &= ~( 1 << gHelpScreen.bCurrentHelpScreen );
}
else
{
// gHelpScreen.usHasPlayerSeenHelpScreenInCurrentScreen |= ( 1 << gHelpScreen.bCurrentHelpScreen );
}
// btn->uiFlags |= BUTTON_CLICKED_ON;
*/
}
}
/*
void HelpScreenDontShowHelpAgainToggleTextRegionCallBack(MOUSE_REGION * pRegion, INT32 iReason )
{
if (iReason & MSYS_CALLBACK_REASON_LBUTTON_UP)
{
InvalidateRegion(pRegion->RegionTopLeftX, pRegion->RegionTopLeftY, pRegion->RegionBottomRightX, pRegion->RegionBottomRightY);
}
else if( iReason & MSYS_CALLBACK_REASON_LBUTTON_DWN )
{
if( gGameSettings.fOptions[ ubButton ] )
{
}
else
{
}
}
}
*/
//set the fact the we have chmaged to a new screen
void NewScreenSoResetHelpScreen( )
{
gHelpScreen.fHaveAlreadyBeenInHelpScreenSinceEnteringCurrenScreen = FALSE;
gHelpScreen.bDelayEnteringHelpScreenBy1FrameCount = 0;
}
void BtnHelpScreenExitCallback(GUI_BUTTON *btn,INT32 reason)
{
if(reason & MSYS_CALLBACK_REASON_LBUTTON_DWN )
{
btn->uiFlags |= BUTTON_CLICKED_ON;
InvalidateRegion(btn->Area.RegionTopLeftX, btn->Area.RegionTopLeftY, btn->Area.RegionBottomRightX, btn->Area.RegionBottomRightY);
}
if(reason & MSYS_CALLBACK_REASON_LBUTTON_UP )
{
InvalidateRegion(btn->Area.RegionTopLeftX, btn->Area.RegionTopLeftY, btn->Area.RegionBottomRightX, btn->Area.RegionBottomRightY);
PrepareToExitHelpScreen();
btn->uiFlags &= (~BUTTON_CLICKED_ON );
}
if(reason & MSYS_CALLBACK_REASON_LOST_MOUSE)
{
btn->uiFlags &= (~BUTTON_CLICKED_ON );
InvalidateRegion(btn->Area.RegionTopLeftX, btn->Area.RegionTopLeftY, btn->Area.RegionBottomRightX, btn->Area.RegionBottomRightY);
}
}
UINT16 RenderLaptopHelpScreen()
{
UINT16 usPosX, usPosY, usWidth, usNumVertPixels;
UINT8 ubCnt;
UINT16 usTotalNumberOfVerticalPixels=0;
UINT16 usFontHeight = GetFontHeight( HELP_SCREEN_TEXT_BODY_FONT );
if( gHelpScreen.bCurrentHelpScreenActiveSubPage == -1 )
{
return( 0 );
}
//Get the position for the text
GetHelpScreenTextPositions( &usPosX, &usPosY, &usWidth );
//switch on the current screen
switch( gHelpScreen.bCurrentHelpScreenActiveSubPage )
{
case HLP_SCRN_LPTP_OVERVIEW:
//Display all the paragraphs
for( ubCnt=0; ubCnt<2; ubCnt++ )
{
//Display the text, and get the number of pixels it used to display it
usNumVertPixels = GetAndDisplayHelpScreenText( HLP_TXT_LAPTOP_OVERVIEW_P1+ubCnt, usPosX, usPosY, usWidth );
//move the next text down by the right amount
usPosY = usPosY+ usNumVertPixels + usFontHeight;
//add the total amount of pixels used
usTotalNumberOfVerticalPixels += usNumVertPixels + usFontHeight;
}
/*
//Display the first paragraph
usTotalNumberOfVerticalPixels = GetAndDisplayHelpScreenText( HLP_TXT_LAPTOP_OVERVIEW_P1, usPosX, usPosY, usWidth );
usPosY = usPosY+ usNumVertPixels + GetFontHeight( HELP_SCREEN_TEXT_BODY_FONT );
//Display the second paragraph
usTotalNumberOfVerticalPixels += GetAndDisplayHelpScreenText( HLP_TXT_LAPTOP_OVERVIEW_P2, usPosX, usPosY, usWidth );
*/
break;
case HLP_SCRN_LPTP_EMAIL:
//Display the first paragraph
usTotalNumberOfVerticalPixels = GetAndDisplayHelpScreenText( HLP_TXT_LAPTOP_EMAIL_P1, usPosX, usPosY, usWidth );
break;
case HLP_SCRN_LPTP_WEB:
//Display the first paragraph
usTotalNumberOfVerticalPixels = GetAndDisplayHelpScreenText( HLP_TXT_LAPTOP_WEB_P1, usPosX, usPosY, usWidth );
break;
case HLP_SCRN_LPTP_FILES:
//Display the first paragraph
usTotalNumberOfVerticalPixels = GetAndDisplayHelpScreenText( HLP_TXT_LAPTOP_FILES_P1, usPosX, usPosY, usWidth );
break;
case HLP_SCRN_LPTP_HISTORY:
//Display the first paragraph
usTotalNumberOfVerticalPixels = GetAndDisplayHelpScreenText( HLP_TXT_LAPTOP_HISTORY_P1, usPosX, usPosY, usWidth );
break;
case HLP_SCRN_LPTP_PERSONNEL:
//Display the first paragraph
usTotalNumberOfVerticalPixels = GetAndDisplayHelpScreenText( HLP_TXT_LAPTOP_PERSONNEL_P1, usPosX, usPosY, usWidth );
break;
case HLP_SCRN_LPTP_FINANCIAL:
//Display all the paragraphs
for( ubCnt=0; ubCnt<2; ubCnt++ )
{
usNumVertPixels = GetAndDisplayHelpScreenText( HLP_TXT_FINANCES_P1+ubCnt, usPosX, usPosY, usWidth );
//move the next text down by the right amount
usPosY = usPosY+ usNumVertPixels + usFontHeight;
//add the total amount of pixels used
usTotalNumberOfVerticalPixels += usNumVertPixels + usFontHeight;
}
break;
case HLP_SCRN_LPTP_MERC_STATS:
//Display all the paragraphs
for( ubCnt=0; ubCnt<15; ubCnt++ )
{
usNumVertPixels = GetAndDisplayHelpScreenText( HLP_TXT_MERC_STATS_P1+ubCnt, usPosX, usPosY, usWidth );
//move the next text down by the right amount
usPosY = usPosY+ usNumVertPixels + usFontHeight;
//add the total amount of pixels used
usTotalNumberOfVerticalPixels += usNumVertPixels + usFontHeight;
}
break;
}
return( usTotalNumberOfVerticalPixels );
}
UINT16 RenderMapScreenNoOneHiredYetHelpScreen()
{
UINT16 usPosX, usPosY, usWidth, usNumVertPixels;
UINT8 ubCnt;
UINT16 usTotalNumberOfVerticalPixels=0;
UINT16 usFontHeight = GetFontHeight( HELP_SCREEN_TEXT_BODY_FONT );
if( gHelpScreen.bCurrentHelpScreenActiveSubPage == -1 )
{
return( 0 );
}
//Get the position for the text
GetHelpScreenTextPositions( &usPosX, &usPosY, &usWidth );
//switch on the current screen
switch( gHelpScreen.bCurrentHelpScreenActiveSubPage )
{
case HLP_SCRN_NO_ONE_HIRED:
//Display all the paragraphs
for( ubCnt=0; ubCnt<2; ubCnt++ )
{
usNumVertPixels = GetAndDisplayHelpScreenText( HLP_TXT_MPSCRN_NO_1_HIRED_YET_P1+ubCnt, usPosX, usPosY, usWidth );
//move the next text down by the right amount
usPosY = usPosY+ usNumVertPixels + usFontHeight;
//add the total amount of pixels used
usTotalNumberOfVerticalPixels += usNumVertPixels + usFontHeight;
}
break;
}
return( usTotalNumberOfVerticalPixels );
}
UINT16 RenderMapScreenNotYetInArulcoHelpScreen()
{
UINT16 usPosX, usPosY, usWidth, usNumVertPixels;
UINT8 ubCnt;
UINT16 usTotalNumberOfVerticalPixels=0;
UINT16 usFontHeight = GetFontHeight( HELP_SCREEN_TEXT_BODY_FONT );
if( gHelpScreen.bCurrentHelpScreenActiveSubPage == -1 )
{
return( 0 );
}
//Get the position for the text
GetHelpScreenTextPositions( &usPosX, &usPosY, &usWidth );
//switch on the current screen
switch( gHelpScreen.bCurrentHelpScreenActiveSubPage )
{
case HLP_SCRN_NOT_IN_ARULCO:
//Display all the paragraphs
for( ubCnt=0; ubCnt<3; ubCnt++ )
{
usNumVertPixels = GetAndDisplayHelpScreenText( HLP_TXT_MPSCRN_NOT_IN_ARULCO_P1+ubCnt, usPosX, usPosY, usWidth );
//move the next text down by the right amount
usPosY = usPosY+ usNumVertPixels + usFontHeight;
//add the total amount of pixels used
usTotalNumberOfVerticalPixels += usNumVertPixels + usFontHeight;
}
break;
}
return( usTotalNumberOfVerticalPixels );
}
UINT16 RenderMapScreenSectorInventoryHelpScreen()
{
UINT16 usPosX, usPosY, usWidth, usNumVertPixels;
UINT8 ubCnt;
UINT16 usTotalNumberOfVerticalPixels=0;
UINT16 usFontHeight = GetFontHeight( HELP_SCREEN_TEXT_BODY_FONT );
if( gHelpScreen.bCurrentHelpScreenActiveSubPage == -1 )
{
return( 0 );
}
//Get the position for the text
GetHelpScreenTextPositions( &usPosX, &usPosY, &usWidth );
//switch on the current screen
switch( gHelpScreen.bCurrentHelpScreenActiveSubPage )
{
case HLP_SCRN_MPSCRN_SCTR_OVERVIEW:
//Display all the paragraphs
for( ubCnt=0; ubCnt<2; ubCnt++ )
{
usNumVertPixels = GetAndDisplayHelpScreenText( HLP_TXT_SECTOR_INVTRY_OVERVIEW_P1+ubCnt, usPosX, usPosY, usWidth );
//move the next text down by the right amount
usPosY = usPosY+ usNumVertPixels + usFontHeight;
//add the total amount of pixels used
usTotalNumberOfVerticalPixels += usNumVertPixels + usFontHeight;
}
break;
}
return( usTotalNumberOfVerticalPixels );
}
UINT16 RenderTacticalHelpScreen()
{
UINT16 usPosX, usPosY, usWidth, usNumVertPixels;
UINT8 ubCnt;
UINT16 usTotalNumberOfVerticalPixels=0;
UINT16 usFontHeight = GetFontHeight( HELP_SCREEN_TEXT_BODY_FONT );
if( gHelpScreen.bCurrentHelpScreenActiveSubPage == -1 )
{
return( 0 );
}
//Get the position for the text
GetHelpScreenTextPositions( &usPosX, &usPosY, &usWidth );
//switch on the current screen
switch( gHelpScreen.bCurrentHelpScreenActiveSubPage )
{
case HLP_SCRN_TACTICAL_OVERVIEW:
//Display all the paragraph
for( ubCnt=0; ubCnt<4; ubCnt++ )
{
usNumVertPixels = GetAndDisplayHelpScreenText( HLP_TXT_TACTICAL_OVERVIEW_P1+ubCnt, usPosX, usPosY, usWidth );
//move the next text down by the right amount
usPosY = usPosY+ usNumVertPixels + usFontHeight;
//add the total amount of pixels used
usTotalNumberOfVerticalPixels += usNumVertPixels + usFontHeight;
}
break;
case HLP_SCRN_TACTICAL_MOVEMENT:
//Display all the paragraphs
for( ubCnt=0; ubCnt<4; ubCnt++ )
{
usNumVertPixels = GetAndDisplayHelpScreenText( HLP_TXT_TACTICAL_MOVEMENT_P1+ubCnt, usPosX, usPosY, usWidth );
//move the next text down by the right amount
usPosY = usPosY+ usNumVertPixels + usFontHeight;
//add the total amount of pixels used
usTotalNumberOfVerticalPixels += usNumVertPixels + usFontHeight;
}
break;
case HLP_SCRN_TACTICAL_SIGHT:
//Display all the paragraphs
for( ubCnt=0; ubCnt<4; ubCnt++ )
{
usNumVertPixels = GetAndDisplayHelpScreenText( HLP_TXT_TACTICAL_SIGHT_P1+ubCnt, usPosX, usPosY, usWidth );
//move the next text down by the right amount
usPosY = usPosY+ usNumVertPixels + usFontHeight;
//add the total amount of pixels used
usTotalNumberOfVerticalPixels += usNumVertPixels + usFontHeight;
}
break;
case HLP_SCRN_TACTICAL_ATTACKING:
//Display all the paragraphs
for( ubCnt=0; ubCnt<3; ubCnt++ )
{
usNumVertPixels = GetAndDisplayHelpScreenText( HLP_TXT_TACTICAL_ATTACKING_P1+ubCnt, usPosX, usPosY, usWidth );
//move the next text down by the right amount
usPosY = usPosY+ usNumVertPixels + usFontHeight;
//add the total amount of pixels used
usTotalNumberOfVerticalPixels += usNumVertPixels + usFontHeight;
}
break;
case HLP_SCRN_TACTICAL_ITEMS:
//Display all the paragraphs
for( ubCnt=0; ubCnt<4; ubCnt++ )
{
usNumVertPixels = GetAndDisplayHelpScreenText( HLP_TXT_TACTICAL_ITEMS_P1+ubCnt, usPosX, usPosY, usWidth );
//move the next text down by the right amount
usPosY = usPosY+ usNumVertPixels + usFontHeight;
//add the total amount of pixels used
usTotalNumberOfVerticalPixels += usNumVertPixels + usFontHeight;
}
break;
case HLP_SCRN_TACTICAL_KEYBOARD:
//Display all the paragraphs
for( ubCnt=0; ubCnt<8; ubCnt++ )
{
usNumVertPixels = GetAndDisplayHelpScreenText( HLP_TXT_TACTICAL_KEYBOARD_P1+ubCnt, usPosX, usPosY, usWidth );
//move the next text down by the right amount
usPosY = usPosY+ usNumVertPixels + usFontHeight;
//add the total amount of pixels used
usTotalNumberOfVerticalPixels += usNumVertPixels + usFontHeight;
}
break;
}
return( usTotalNumberOfVerticalPixels );
}
UINT16 RenderMapScreenHelpScreen()
{
UINT16 usPosX, usPosY, usWidth, usNumVertPixels;
UINT8 ubCnt;
UINT16 usTotalNumberOfVerticalPixels=0;
UINT16 usFontHeight = GetFontHeight( HELP_SCREEN_TEXT_BODY_FONT );
if( gHelpScreen.bCurrentHelpScreenActiveSubPage == -1 )
{
return( 0 );
}
//Get the position for the text
GetHelpScreenTextPositions( &usPosX, &usPosY, &usWidth );
//switch on the current screen
switch( gHelpScreen.bCurrentHelpScreenActiveSubPage )
{
case HLP_SCRN_MPSCRN_OVERVIEW:
//Display all the paragraph
for( ubCnt=0; ubCnt<3; ubCnt++ )
{
usNumVertPixels = GetAndDisplayHelpScreenText( HLP_TXT_WELCOM_TO_ARULCO_OVERVIEW_P1+ubCnt, usPosX, usPosY, usWidth );
//move the next text down by the right amount
usPosY = usPosY+ usNumVertPixels + usFontHeight;
//add the total amount of pixels used
usTotalNumberOfVerticalPixels += usNumVertPixels + usFontHeight;
}
break;
case HLP_SCRN_MPSCRN_ASSIGNMENTS:
//Display all the paragraphs
for( ubCnt=0; ubCnt<4; ubCnt++ )
{
usNumVertPixels = GetAndDisplayHelpScreenText( HLP_TXT_WELCOM_TO_ARULCO_ASSNMNT_P1+ubCnt, usPosX, usPosY, usWidth );
//move the next text down by the right amount
usPosY = usPosY+ usNumVertPixels + usFontHeight;
//add the total amount of pixels used
usTotalNumberOfVerticalPixels += usNumVertPixels + usFontHeight;
}
break;
case HLP_SCRN_MPSCRN_DESTINATIONS:
//Display all the paragraphs
for( ubCnt=0; ubCnt<5; ubCnt++ )
{
usNumVertPixels = GetAndDisplayHelpScreenText( HLP_TXT_WELCOM_TO_ARULCO_DSTINATION_P1+ubCnt, usPosX, usPosY, usWidth );
//move the next text down by the right amount
usPosY = usPosY+ usNumVertPixels + usFontHeight;
//add the total amount of pixels used
usTotalNumberOfVerticalPixels += usNumVertPixels + usFontHeight;
}
break;
case HLP_SCRN_MPSCRN_MAP:
//Display all the paragraphs
for( ubCnt=0; ubCnt<3; ubCnt++ )
{
usNumVertPixels = GetAndDisplayHelpScreenText( HLP_TXT_WELCOM_TO_ARULCO_MAP_P1+ubCnt, usPosX, usPosY, usWidth );
//move the next text down by the right amount
usPosY = usPosY+ usNumVertPixels + usFontHeight;
//add the total amount of pixels used
usTotalNumberOfVerticalPixels += usNumVertPixels + usFontHeight;
}
break;
case HLP_SCRN_MPSCRN_MILITIA:
//Display all the paragraphs
for( ubCnt=0; ubCnt<3; ubCnt++ )
{
usNumVertPixels = GetAndDisplayHelpScreenText( HLP_TXT_WELCOM_TO_ARULCO_MILITIA_P1+ubCnt, usPosX, usPosY, usWidth );
//move the next text down by the right amount
usPosY = usPosY+ usNumVertPixels + usFontHeight;
//add the total amount of pixels used
usTotalNumberOfVerticalPixels += usNumVertPixels + usFontHeight;
}
break;
case HLP_SCRN_MPSCRN_AIRSPACE:
//Display all the paragraphs
for( ubCnt=0; ubCnt<2; ubCnt++ )
{
usNumVertPixels = GetAndDisplayHelpScreenText( HLP_TXT_WELCOM_TO_ARULCO_AIRSPACE_P1+ubCnt, usPosX, usPosY, usWidth );
//move the next text down by the right amount
usPosY = usPosY+ usNumVertPixels + usFontHeight;
//add the total amount of pixels used
usTotalNumberOfVerticalPixels += usNumVertPixels + usFontHeight;
}
break;
case HLP_SCRN_MPSCRN_ITEMS:
//Display all the paragraphs
for( ubCnt=0; ubCnt<1; ubCnt++ )
{
usNumVertPixels = GetAndDisplayHelpScreenText( HLP_TXT_WELCOM_TO_ARULCO_ITEMS_P1+ubCnt, usPosX, usPosY, usWidth );
//move the next text down by the right amount
usPosY = usPosY+ usNumVertPixels + usFontHeight;
//add the total amount of pixels used
usTotalNumberOfVerticalPixels += usNumVertPixels + usFontHeight;
}
break;
case HLP_SCRN_MPSCRN_KEYBOARD:
//Display all the paragraphs
for( ubCnt=0; ubCnt<4; ubCnt++ )
{
usNumVertPixels = GetAndDisplayHelpScreenText( HLP_TXT_WELCOM_TO_ARULCO_KEYBOARD_P1+ubCnt, usPosX, usPosY, usWidth );
//move the next text down by the right amount
usPosY = usPosY+ usNumVertPixels + usFontHeight;
//add the total amount of pixels used
usTotalNumberOfVerticalPixels += usNumVertPixels + usFontHeight;
}
break;
}
return( usTotalNumberOfVerticalPixels );
}
void RefreshAllHelpScreenButtons()
{
UINT8 i;
//loop through all the buttons, and refresh them
for( i=0; i< gHelpScreen.bNumberOfButtons; i++ )
{
ButtonList[ guiHelpScreenBtns[i] ]->uiFlags |= BUTTON_DIRTY;
}
ButtonList[ guiHelpScreenExitBtn ]->uiFlags |= BUTTON_DIRTY;
if( !gHelpScreen.fForceHelpScreenToComeUp )
{
ButtonList[ gHelpScreenDontShowHelpAgainToggle ]->uiFlags |= BUTTON_DIRTY;
}
ButtonList[ giHelpScreenScrollArrows[0] ]->uiFlags |= BUTTON_DIRTY;
ButtonList[ giHelpScreenScrollArrows[1] ]->uiFlags |= BUTTON_DIRTY;
}
INT8 HelpScreenDetermineWhichMapScreenHelpToShow()
{
if( fShowMapInventoryPool )
{
return( HELP_SCREEN_MAPSCREEN_SECTOR_INVENTORY );
}
if( AnyMercsHired() == FALSE )
{
return( HELP_SCREEN_MAPSCREEN_NO_ONE_HIRED );
}
if( gTacticalStatus.fDidGameJustStart )
{
return( HELP_SCREEN_MAPSCREEN_NOT_IN_ARULCO );
}
return( HELP_SCREEN_MAPSCREEN );
}
BOOLEAN CreateHelpScreenTextBuffer()
{
VSURFACE_DESC vs_desc;
// Create a background video surface to blt the face onto
vs_desc.fCreateFlags = VSURFACE_CREATE_DEFAULT | VSURFACE_SYSTEM_MEM_USAGE;
vs_desc.usWidth = HLP_SCRN__WIDTH_OF_TEXT_BUFFER;
vs_desc.usHeight = HLP_SCRN__HEIGHT_OF_TEXT_BUFFER;
vs_desc.ubBitDepth = 16;
CHECKF( AddVideoSurface( &vs_desc, &guiHelpScreenTextBufferSurface) );
return( TRUE );
}
void DestroyHelpScreenTextBuffer()
{
DeleteVideoSurfaceFromIndex( guiHelpScreenTextBufferSurface );
}
void RenderCurrentHelpScreenTextToBuffer()
{
//clear the buffer ( use 0, black as a transparent color
ClearHelpScreenTextBuffer();
//Render the current screen, and get the number of pixels it used to display
gHelpScreen.usTotalNumberOfPixelsInBuffer = RenderSpecificHelpScreen();
//calc the number of lines in the buffer
gHelpScreen.usTotalNumberOfLinesInBuffer = gHelpScreen.usTotalNumberOfPixelsInBuffer / ( HLP_SCRN__HEIGHT_OF_1_LINE_IN_BUFFER );
}
void RenderTextBufferToScreen()
{
HVSURFACE hDestVSurface, hSrcVSurface;
SGPRect SrcRect;
GetVideoSurface( &hDestVSurface, guiRENDERBUFFER );
GetVideoSurface( &hSrcVSurface, guiHelpScreenTextBufferSurface );
SrcRect.iLeft = 0;
SrcRect.iTop = gHelpScreen.iLineAtTopOfTextBuffer * HLP_SCRN__HEIGHT_OF_1_LINE_IN_BUFFER;
SrcRect.iRight = HLP_SCRN__WIDTH_OF_TEXT_BUFFER;
SrcRect.iBottom = SrcRect.iTop + HLP_SCRN__HEIGHT_OF_TEXT_AREA - ( 2 * 8 );
BltVSurfaceUsingDD( hDestVSurface, hSrcVSurface, VO_BLT_SRCTRANSPARENCY, gHelpScreen.usLeftMarginPosX, ( gHelpScreen.usScreenLocY + HELP_SCREEN_TEXT_OFFSET_Y ), (RECT*)&SrcRect );
DisplayHelpScreenTextBufferScrollBox();
}
void ChangeHelpScreenSubPage()
{
//reset
gHelpScreen.iLineAtTopOfTextBuffer = 0;
RenderCurrentHelpScreenTextToBuffer();
//enable or disable the help screen arrow buttons
if( gHelpScreen.usTotalNumberOfLinesInBuffer <= HLP_SCRN__MAX_NUMBER_DISPLAYED_LINES_IN_BUFFER )
{
DisableButton( giHelpScreenScrollArrows[0] );
DisableButton( giHelpScreenScrollArrows[1] );
}
else
{
EnableButton( giHelpScreenScrollArrows[0] );
EnableButton( giHelpScreenScrollArrows[1] );
}
}
void ClearHelpScreenTextBuffer()
{
UINT32 uiDestPitchBYTES;
UINT8 *pDestBuf;
// CLEAR THE FRAME BUFFER
pDestBuf = LockVideoSurface( guiHelpScreenTextBufferSurface, &uiDestPitchBYTES );
memset(pDestBuf, 0, HLP_SCRN__HEIGHT_OF_TEXT_BUFFER * uiDestPitchBYTES );
UnLockVideoSurface( guiHelpScreenTextBufferSurface );
InvalidateScreen( );
}
// - is up, + is down
void ChangeTopLineInTextBufferByAmount( INT32 iAmouontToMove )
{
//if we are moving up
if( iAmouontToMove < 0 )
{
if( gHelpScreen.iLineAtTopOfTextBuffer + iAmouontToMove >= 0 )
{
//if we can move up by the requested amount
if( ( gHelpScreen.usTotalNumberOfLinesInBuffer - gHelpScreen.iLineAtTopOfTextBuffer ) > iAmouontToMove )
{
gHelpScreen.iLineAtTopOfTextBuffer += iAmouontToMove;
}
//else, trying to move past the top
else
{
gHelpScreen.iLineAtTopOfTextBuffer = 0;
}
}
else
{
gHelpScreen.iLineAtTopOfTextBuffer = 0;
}
}
//else we are moving down
else
{
//if we dont have to scroll cause there is not enough text
if( gHelpScreen.usTotalNumberOfLinesInBuffer <= HLP_SCRN__MAX_NUMBER_DISPLAYED_LINES_IN_BUFFER )
{
gHelpScreen.iLineAtTopOfTextBuffer = 0;
}
else
{
if( ( gHelpScreen.iLineAtTopOfTextBuffer + HLP_SCRN__MAX_NUMBER_DISPLAYED_LINES_IN_BUFFER + iAmouontToMove ) <= gHelpScreen.usTotalNumberOfLinesInBuffer )
{
gHelpScreen.iLineAtTopOfTextBuffer += iAmouontToMove;
}
else
{
gHelpScreen.iLineAtTopOfTextBuffer = gHelpScreen.usTotalNumberOfLinesInBuffer - HLP_SCRN__MAX_NUMBER_DISPLAYED_LINES_IN_BUFFER;
}
}
}
// RenderCurrentHelpScreenTextToBuffer();
gHelpScreen.ubHelpScreenDirty = HLP_SCRN_DRTY_LVL_REFRESH_TEXT;
}
void DisplayHelpScreenTextBufferScrollBox()
{
INT32 iSizeOfBox;
INT32 iTopPosScrollBox=0;
UINT8 *pDestBuf;
UINT32 uiDestPitchBYTES;
UINT16 usPosX;
if( gHelpScreen.bNumberOfButtons != 0 )
{
usPosX = gHelpScreen.usScreenLocX + HLP_SCRN__SCROLL_POSX + HELP_SCREEN_BUTTON_BORDER_WIDTH;
}
else
{
usPosX = gHelpScreen.usScreenLocX + HLP_SCRN__SCROLL_POSX;
}
//
//first calculate the height of the scroll box
//
CalculateHeightAndPositionForHelpScreenScrollBox( &iSizeOfBox, &iTopPosScrollBox );
//
// next draw the box
//
//if there ARE scroll bars, draw the
if( !( gHelpScreen.usTotalNumberOfLinesInBuffer <= HLP_SCRN__MAX_NUMBER_DISPLAYED_LINES_IN_BUFFER ) )
{
ColorFillVideoSurfaceArea( FRAME_BUFFER, usPosX, iTopPosScrollBox, usPosX+HLP_SCRN__WIDTH_OF_SCROLL_AREA, iTopPosScrollBox+iSizeOfBox-1, Get16BPPColor( FROMRGB( 227, 198, 88 ) ) );
//display the line
pDestBuf = LockVideoSurface( FRAME_BUFFER, &uiDestPitchBYTES );
SetClippingRegionAndImageWidth( uiDestPitchBYTES, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
// draw the gold highlite line on the top and left
LineDraw(FALSE, usPosX, iTopPosScrollBox, usPosX+HLP_SCRN__WIDTH_OF_SCROLL_AREA, iTopPosScrollBox, Get16BPPColor( FROMRGB( 235, 222, 171 ) ), pDestBuf);
LineDraw(FALSE, usPosX, iTopPosScrollBox, usPosX, iTopPosScrollBox+iSizeOfBox-1, Get16BPPColor( FROMRGB( 235, 222, 171 ) ), pDestBuf);
// draw the shadow line on the bottom and right
LineDraw(FALSE, usPosX, iTopPosScrollBox+iSizeOfBox-1, usPosX+HLP_SCRN__WIDTH_OF_SCROLL_AREA, iTopPosScrollBox+iSizeOfBox-1, Get16BPPColor( FROMRGB( 65, 49, 6 ) ), pDestBuf);
LineDraw(FALSE, usPosX+HLP_SCRN__WIDTH_OF_SCROLL_AREA, iTopPosScrollBox, usPosX+HLP_SCRN__WIDTH_OF_SCROLL_AREA, iTopPosScrollBox+iSizeOfBox-1, Get16BPPColor( FROMRGB( 65, 49, 6 ) ), pDestBuf);
// unlock frame buffer
UnLockVideoSurface( FRAME_BUFFER );
}
}
void CreateScrollAreaButtons()
{
UINT16 usPosX, usWidth, usPosY;
INT32 iPosY, iHeight;
if( gHelpScreen.bNumberOfButtons != 0 )
{
usPosX = gHelpScreen.usScreenLocX + HLP_SCRN__SCROLL_POSX + HELP_SCREEN_BUTTON_BORDER_WIDTH;
}
else
{
usPosX = gHelpScreen.usScreenLocX + HLP_SCRN__SCROLL_POSX;
}
usWidth = HLP_SCRN__WIDTH_OF_SCROLL_AREA;
//Get the height and position of the scroll box
CalculateHeightAndPositionForHelpScreenScrollBox( &iHeight, &iPosY );
//Create a mouse region 'mask' the entrire screen
MSYS_DefineRegion( &gHelpScreenScrollArea, usPosX, (UINT16)iPosY, (UINT16)(usPosX+usWidth), (UINT16)(iPosY+HLP_SCRN__HEIGHT_OF_SCROLL_AREA), MSYS_PRIORITY_HIGHEST,
gHelpScreen.usCursor, SelectHelpScrollAreaMovementCallBack, SelectHelpScrollAreaCallBack );
MSYS_AddRegion( &gHelpScreenScrollArea );
guiHelpScreenScrollArrowImage[ 0 ] = LoadButtonImage( "INTERFACE\\HelpScreen.sti", 14,10, 11, 12 ,13 );
guiHelpScreenScrollArrowImage[ 1 ] = UseLoadedButtonImage( guiHelpScreenScrollArrowImage[ 0 ] ,19,15,16,17,18 );
if( gHelpScreen.bNumberOfButtons != 0 )
usPosX = gHelpScreen.usScreenLocX + HLP_SCRN__SCROLL_UP_ARROW_X + HELP_SCREEN_BUTTON_BORDER_WIDTH;
else
usPosX = gHelpScreen.usScreenLocX + HLP_SCRN__SCROLL_UP_ARROW_X;
usPosY = gHelpScreen.usScreenLocY + HLP_SCRN__SCROLL_UP_ARROW_Y;
//Create the scroll arrows
giHelpScreenScrollArrows[ 0 ] = QuickCreateButton( guiHelpScreenScrollArrowImage[ 0 ], usPosX, usPosY,
BUTTON_TOGGLE, MSYS_PRIORITY_HIGHEST,
DEFAULT_MOVE_CALLBACK, BtnHelpScreenScrollArrowsCallback );
MSYS_SetBtnUserData( giHelpScreenScrollArrows[0],0,0);
SetButtonCursor( giHelpScreenScrollArrows[0], gHelpScreen.usCursor );
usPosY = gHelpScreen.usScreenLocY + HLP_SCRN__SCROLL_DWN_ARROW_Y;
//Create the scroll arrows
giHelpScreenScrollArrows[ 1 ] = QuickCreateButton( guiHelpScreenScrollArrowImage[ 1 ], usPosX, usPosY,
BUTTON_TOGGLE, MSYS_PRIORITY_HIGHEST,
DEFAULT_MOVE_CALLBACK, BtnHelpScreenScrollArrowsCallback );
MSYS_SetBtnUserData( giHelpScreenScrollArrows[1],0,1);
SetButtonCursor( giHelpScreenScrollArrows[1], gHelpScreen.usCursor );
}
void DeleteScrollArrowButtons()
{
INT8 i;
//remove the mouse region that blankets
MSYS_RemoveRegion( &gHelpScreenScrollArea );
for( i=0; i<2; i++)
{
RemoveButton( giHelpScreenScrollArrows[ i ] );
UnloadButtonImage( guiHelpScreenScrollArrowImage[ i ] );
}
}
void CalculateHeightAndPositionForHelpScreenScrollBox( INT32 *piHeightOfScrollBox, INT32 *piTopOfScrollBox )
{
INT32 iSizeOfBox, iTopPosScrollBox;
FLOAT dPercentSizeOfBox = 0;
FLOAT dTemp=0;
dPercentSizeOfBox = HLP_SCRN__MAX_NUMBER_DISPLAYED_LINES_IN_BUFFER / (FLOAT ) gHelpScreen.usTotalNumberOfLinesInBuffer;
//if the # is >= 1 then the box is the full size of the scroll area
if( dPercentSizeOfBox >= 1.0 )
{
iSizeOfBox = HLP_SCRN__HEIGHT_OF_SCROLL_AREA;
//no need to calc the top spot for the box
iTopPosScrollBox = HLP_SCRN__SCROLL_POSY;
}
else
{
iSizeOfBox = (INT32)( dPercentSizeOfBox * HLP_SCRN__HEIGHT_OF_SCROLL_AREA + 0.5 );
//
//next, calculate the top position of the box
//
dTemp = ( HLP_SCRN__HEIGHT_OF_SCROLL_AREA / ( FLOAT ) gHelpScreen.usTotalNumberOfLinesInBuffer ) * gHelpScreen.iLineAtTopOfTextBuffer;
iTopPosScrollBox = (INT32)( dTemp +.5 ) + HLP_SCRN__SCROLL_POSY;
}
if( piHeightOfScrollBox != NULL )
*piHeightOfScrollBox = iSizeOfBox;
if( piTopOfScrollBox != NULL )
*piTopOfScrollBox = iTopPosScrollBox;
}
void SelectHelpScrollAreaCallBack(MOUSE_REGION * pRegion, INT32 iReason )
{
if (iReason & MSYS_CALLBACK_REASON_INIT)
{
}
else if (iReason & MSYS_CALLBACK_REASON_LBUTTON_UP)
{
gfScrollBoxIsScrolling = FALSE;
gHelpScreen.iLastMouseClickY = -1;
}
else if( iReason & MSYS_CALLBACK_REASON_LBUTTON_DWN )
{
gfScrollBoxIsScrolling = TRUE;
HelpScreenMouseMoveScrollBox( pRegion->MouseYPos );
}
else if (iReason & MSYS_CALLBACK_REASON_RBUTTON_UP)
{
}
}
void SelectHelpScrollAreaMovementCallBack(MOUSE_REGION * pRegion, INT32 iReason )
{
if( iReason & MSYS_CALLBACK_REASON_LOST_MOUSE )
{
// InvalidateRegion(pRegion->RegionTopLeftX, pRegion->RegionTopLeftY, pRegion->RegionBottomRightX, pRegion->RegionBottomRightY);
}
else if( iReason & MSYS_CALLBACK_REASON_GAIN_MOUSE )
{
}
else if( iReason & MSYS_CALLBACK_REASON_MOVE )
{
if( gfLeftButtonState )
{
HelpScreenMouseMoveScrollBox( pRegion->MouseYPos );
}
}
}
void HelpScreenMouseMoveScrollBox( INT32 usMousePosY )
{
INT32 iPosY, iHeight;
INT32 iNumberOfIncrements=0;
FLOAT dSizeOfIncrement = ( HLP_SCRN__HEIGHT_OF_SCROLL_AREA / ( FLOAT ) gHelpScreen.usTotalNumberOfLinesInBuffer );
FLOAT dTemp;
INT32 iNewPosition;
CalculateHeightAndPositionForHelpScreenScrollBox( &iHeight, &iPosY );
if( AreWeClickingOnScrollBar( usMousePosY ) || gHelpScreen.iLastMouseClickY != -1 )
{
if( gHelpScreen.iLastMouseClickY == -1 )
gHelpScreen.iLastMouseClickY = usMousePosY;
if( usMousePosY < gHelpScreen.iLastMouseClickY )
{
// iNewPosition = iPosY - ( UINT16)( dSizeOfIncrement + .5);
iNewPosition = iPosY - ( gHelpScreen.iLastMouseClickY - usMousePosY );
}
else if( usMousePosY > gHelpScreen.iLastMouseClickY )
{
// iNewPosition = iPosY + ( UINT16)( dSizeOfIncrement + .5);
iNewPosition = iPosY + usMousePosY - gHelpScreen.iLastMouseClickY;
}
else
{
return;
}
dTemp = ( iNewPosition - iPosY ) / dSizeOfIncrement;
if( dTemp < 0 )
iNumberOfIncrements = (INT32)( dTemp - 0.5 );
else
iNumberOfIncrements = (INT32)( dTemp + 0.5 );
gHelpScreen.iLastMouseClickY = usMousePosY;
// return;
}
else
{
//if the mouse is higher then the top of the scroll area, set it to the top of the scroll area
if( usMousePosY < HLP_SCRN__SCROLL_POSY )
usMousePosY = HLP_SCRN__SCROLL_POSY;
dTemp = ( usMousePosY - iPosY ) / dSizeOfIncrement;
if( dTemp < 0 )
iNumberOfIncrements = (INT32)( dTemp - 0.5 );
else
iNumberOfIncrements = (INT32)( dTemp + 0.5 );
}
//if there has been a change
if( iNumberOfIncrements != 0 )
{
ChangeTopLineInTextBufferByAmount( iNumberOfIncrements );
}
}
void BtnHelpScreenScrollArrowsCallback(GUI_BUTTON *btn,INT32 reason)
{
if(reason & MSYS_CALLBACK_REASON_LBUTTON_UP )
{
btn->uiFlags &= (~BUTTON_CLICKED_ON );
InvalidateRegion(btn->Area.RegionTopLeftX, btn->Area.RegionTopLeftY, btn->Area.RegionBottomRightX, btn->Area.RegionBottomRightY);
}
if( reason & MSYS_CALLBACK_REASON_LBUTTON_DWN )
{
INT32 iButtonID = MSYS_GetBtnUserData( btn, 0);
btn->uiFlags |= BUTTON_CLICKED_ON;
//if up
if( iButtonID == 0 )
{
ChangeTopLineInTextBufferByAmount( -1 );
}
else
{
ChangeTopLineInTextBufferByAmount( 1 );
}
InvalidateRegion(btn->Area.RegionTopLeftX, btn->Area.RegionTopLeftY, btn->Area.RegionBottomRightX, btn->Area.RegionBottomRightY);
}
if( reason & MSYS_CALLBACK_REASON_LBUTTON_REPEAT )
{
INT32 iButtonID = MSYS_GetBtnUserData( btn, 0);
//if up
if( iButtonID == 0 )
{
ChangeTopLineInTextBufferByAmount( -1 );
}
else
{
ChangeTopLineInTextBufferByAmount( 1 );
}
InvalidateRegion(btn->Area.RegionTopLeftX, btn->Area.RegionTopLeftY, btn->Area.RegionBottomRightX, btn->Area.RegionBottomRightY);
}
}
BOOLEAN AreWeClickingOnScrollBar( INT32 usMousePosY )
{
INT32 iPosY, iHeight;
CalculateHeightAndPositionForHelpScreenScrollBox( &iHeight, &iPosY );
if( usMousePosY >= iPosY && usMousePosY < ( iPosY + iHeight ) )
return( TRUE );
else
return( FALSE );
}