warzone2100/src/frontend.c

1535 lines
39 KiB
C

/*
This file is part of Warzone 2100.
Copyright (C) 1999-2004 Eidos Interactive
Copyright (C) 2005-2007 Warzone Resurrection Project
Warzone 2100 is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
Warzone 2100 is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Warzone 2100; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
/*
* FrontEnd.c
*
* front end title and options screens.
* Alex Lee. Pumpkin Studios. Eidos PLC 98,
*/
/* Playstation button symbol -> font mappings.
| = X
{ = Circle
} = Square
~ = Triangle
*/
#include <string.h>
#include "lib/framework/frame.h"
#include "lib/framework/frameresource.h"
#include "lib/framework/strres.h"
#include "lib/framework/input.h"
#include "lib/ivis_common/rendmode.h"
#include "lib/netplay/netplay.h"
#include "lib/sound/mixer.h"
#include "lib/widget/widget.h"
#include "lib/widget/slider.h"
#include "lib/widget/label.h"
#include "lib/widget/button.h"
#include "advvis.h"
#include "component.h"
#include "difficulty.h"
#include "display.h"
#include "frend.h"
#include "frontend.h"
#include "hci.h"
#include "ingameop.h"
#include "init.h"
#include "intdisplay.h"
#include "keyedit.h"
#include "loadsave.h"
#include "multiint.h"
#include "multilimit.h"
#include "multiplay.h"
#include "seqdisp.h"
#include "texture.h"
#include "warzoneconfig.h"
#include "main.h"
#include "wrappers.h"
#include "version.h"
#include "configuration.h"
static int StartWithGame = 1; // New game starts in Cam 1.
// Widget code and non-constant strings do not get along
static char resolution[WIDG_MAXSTR];
static char textureSize[WIDG_MAXSTR];
tMode titleMode; // the global case
char aLevelName[MAX_LEVEL_NAME_SIZE+1]; //256]; // vital! the wrf file to use.
BOOL bForceEditorLoaded = false;
BOOL bUsingKeyboard = false; // to disable mouse pointer when using keys.
BOOL bUsingSlider = false;
// ////////////////////////////////////////////////////////////////////////////
// Function Definitions
BOOL startTitleMenu (void);
void startSinglePlayerMenu (void);
BOOL startTutorialMenu (void);
BOOL startMultiPlayerMenu (void);
BOOL startOptionsMenu (void);
BOOL startGameOptionsMenu (void);
BOOL startGameOptions2Menu (void);
BOOL startGameOptions3Menu (void);
BOOL startGameOptions4Menu (void);
void removeTopForm (void);
void removeBottomForm (void);
void removeBackdrop (void);
static void displayTitleBitmap (WIDGET *psWidget, UDWORD xOffset, UDWORD yOffset, PIELIGHT *pColours);
void displayTextAt270 (WIDGET *psWidget, UDWORD xOffset, UDWORD yOffset, PIELIGHT *pColours);
static void displayBigSlider (WIDGET *psWidget, UDWORD xOffset, UDWORD yOffset, PIELIGHT *pColours);
// Returns true if escape key pressed on PC or close button pressed on Playstation.
//
BOOL CancelPressed(void)
{
if(keyPressed(KEY_ESC)) {
return true;
}
return false;
}
// ////////////////////////////////////////////////////////////////////////////
// Change Mode
void changeTitleMode(tMode mode)
{
tMode oldMode;
widgDelete(psWScreen, FRONTEND_BACKDROP); // delete backdrop.
oldMode = titleMode; // store old mode
titleMode = mode; // set new mode
switch(mode)
{
/* case DEMOMODE:// demo case. remove for release
startDemoMenu();
break;
case VIDEO:
startVideoOptionsMenu();
break;
*/
case SINGLE:
startSinglePlayerMenu();
break;
case GAME:
startGameOptionsMenu();
break;
case GAME2:
startGameOptions2Menu();
break;
case GAME3:
startGameOptions3Menu();
break;
case GAME4:
startGameOptions4Menu();
break;
case TUTORIAL:
startTutorialMenu();
break;
case OPTIONS:
startOptionsMenu();
break;
case TITLE:
startTitleMenu();
break;
// case GRAPHICS:
// startGraphicsOptionsMenu();
// break;
case CREDITS:
startCreditsScreen();
break;
case MULTI:
startMultiPlayerMenu(); // goto multiplayer menu
break;
case PROTOCOL:
startConnectionScreen();
break;
case MULTIOPTION:
bUsingKeyboard = false;
if(oldMode == MULTILIMIT)
{
startMultiOptions(true);
}
else
{
startMultiOptions(false);
}
break;
case GAMEFIND:
bUsingKeyboard = false;
startGameFind();
break;
case MULTILIMIT:
bUsingKeyboard = false;
startLimitScreen();
break;
case KEYMAP:
bUsingKeyboard = false;
startKeyMapEditor(true);
break;
case STARTGAME:
case QUIT:
case LOADSAVEGAME:
bUsingKeyboard = false;
bForceEditorLoaded = false;
case SHOWINTRO:
break;
default:
debug( LOG_ERROR, "Unknown title mode requested" );
abort();
break;
}
/* Set default frame rate limit */
setDefaultFrameRateLimit();
return;
}
// ////////////////////////////////////////////////////////////////////////////
// Title Screen
BOOL startTitleMenu(void)
{
// widgDelete(psWScreen,1); // close reticule if it's open. MAGIC NUMBERS?
intRemoveReticule();
addBackdrop();
addTopForm();
addBottomForm();
addTextButton(FRONTEND_SINGLEPLAYER, FRONTEND_POS2X, FRONTEND_POS2Y, _("Single Player Campaign"), false, false);
addTextButton(FRONTEND_MULTIPLAYER, FRONTEND_POS3X, FRONTEND_POS3Y, _("Multi Player Game"), false, false);
addTextButton(FRONTEND_TUTORIAL, FRONTEND_POS4X, FRONTEND_POS4Y, _("Tutorial") ,false,false);
addTextButton(FRONTEND_OPTIONS, FRONTEND_POS5X, FRONTEND_POS5Y, _("Options") ,false,false);
addTextButton(FRONTEND_QUIT, FRONTEND_POS6X, FRONTEND_POS6Y, _("Quit Game"), false, false);
addSideText(FRONTEND_SIDETEXT, FRONTEND_SIDEX, FRONTEND_SIDEY, _("MAIN MENU"));
return true;
}
BOOL runTitleMenu(void)
{
UDWORD id;
id = widgRunScreen(psWScreen); // Run the current set of widgets
switch(id)
{
case FRONTEND_QUIT:
changeTitleMode(CREDITS);
break;
case FRONTEND_MULTIPLAYER:
changeTitleMode(MULTI);
break;
case FRONTEND_SINGLEPLAYER:
changeTitleMode(SINGLE);
break;
case FRONTEND_OPTIONS:
changeTitleMode(OPTIONS);
break;
case FRONTEND_TUTORIAL:
changeTitleMode(TUTORIAL);
break;
default:
break;
}
widgDisplayScreen(psWScreen); // show the widgets currently running
return true;
}
// ////////////////////////////////////////////////////////////////////////////
// Tutorial Menu
BOOL startTutorialMenu(void)
{
addBackdrop();
addTopForm();
addBottomForm();
addTextButton(FRONTEND_TUTORIAL, FRONTEND_POS3X,FRONTEND_POS3Y, _("Tutorial"),false,false);
addTextButton(FRONTEND_FASTPLAY, FRONTEND_POS4X,FRONTEND_POS4Y, _("Fast Play"),false,false);
addSideText (FRONTEND_SIDETEXT ,FRONTEND_SIDEX,FRONTEND_SIDEY,_("TUTORIALS"));
// TRANSLATORS: "Return", in this context, means "return to previous screen/menu"
addMultiBut(psWScreen, FRONTEND_BOTFORM, FRONTEND_QUIT, 10, 10, 30, 29, P_("menu", "Return"), IMAGE_RETURN, IMAGE_RETURN_HI, IMAGE_RETURN_HI);
return true;
}
BOOL runTutorialMenu(void)
{
UDWORD id;
id = widgRunScreen(psWScreen); // Run the current set of widgets
switch(id)
{
case FRONTEND_TUTORIAL:
sstrcpy(aLevelName, TUTORIAL_LEVEL);
changeTitleMode(STARTGAME);
break;
case FRONTEND_FASTPLAY:
sstrcpy(aLevelName, "FASTPLAY");
changeTitleMode(STARTGAME);
break;
case FRONTEND_QUIT:
changeTitleMode(TITLE);
break;
default:
break;
}
// If close button pressed then return from this menu.
if(CancelPressed()) {
changeTitleMode(TITLE);
}
widgDisplayScreen(psWScreen); // show the widgets currently running
return true;
}
// ////////////////////////////////////////////////////////////////////////////
// Single Player Menu
void startSinglePlayerMenu(void)
{
addBackdrop();
addTopForm();
addBottomForm();
addTextButton(FRONTEND_LOADGAME, FRONTEND_POS4X,FRONTEND_POS4Y, _("Load Campaign"),false,false);
addTextButton(FRONTEND_NEWGAME, FRONTEND_POS3X,FRONTEND_POS3Y,_("New Campaign") ,false,false);
addSideText (FRONTEND_SIDETEXT ,FRONTEND_SIDEX,FRONTEND_SIDEY,_("SINGLE PLAYER"));
addMultiBut(psWScreen, FRONTEND_BOTFORM, FRONTEND_QUIT, 10, 10, 30, 29, P_("menu", "Return"), IMAGE_RETURN, IMAGE_RETURN_HI, IMAGE_RETURN_HI);
}
static void frontEndNewGame( void )
{
switch(StartWithGame) {
case 1:
sstrcpy(aLevelName, DEFAULT_LEVEL);
seq_ClearSeqList();
seq_AddSeqToList("cam1/c001.rpl",NULL,"cam1/c001.txa",false);
seq_StartNextFullScreenVideo();
break;
case 2:
sstrcpy(aLevelName, "CAM_2A");
break;
case 3:
sstrcpy(aLevelName, "CAM_3A");
break;
}
changeTitleMode(STARTGAME);
}
void loadOK( void )
{
if(strlen(sRequestResult))
{
sstrcpy(saveGameName, sRequestResult);
changeTitleMode(LOADSAVEGAME);
}
}
BOOL runSinglePlayerMenu(void)
{
UDWORD id;
if(bLoadSaveUp)
{
if(runLoadSave(false))// check for file name.
{
loadOK();
}
}
else
{
id = widgRunScreen(psWScreen); // Run the current set of widgets
switch(id)
{
case FRONTEND_NEWGAME:
frontEndNewGame();
NetPlay.bComms = false;
break;
case FRONTEND_LOADCAM2:
sstrcpy(aLevelName, "CAM_2A");
changeTitleMode(STARTGAME);
#ifdef LOADINGBACKDROPS
AddLoadingBackdrop(true);
#else
initLoadingScreen(true);
#endif
break;
case FRONTEND_LOADCAM3:
sstrcpy(aLevelName, "CAM_3A");
changeTitleMode(STARTGAME);
#ifdef LOADINGBACKDROPS
AddLoadingBackdrop(true);
#else
initLoadingScreen(true);
#endif
break;
case FRONTEND_LOADGAME:
addLoadSave(LOAD_FRONTEND,SaveGamePath,"gam",_("Load Saved Game")); // change mode when loadsave returns
break;
case FRONTEND_QUIT:
changeTitleMode(TITLE);
break;
default:
break;
}
if(CancelPressed())
{
changeTitleMode(TITLE);
}
}
if(!bLoadSaveUp) // if save/load screen is up
{
widgDisplayScreen(psWScreen); // show the widgets currently running
}
if(bLoadSaveUp) // if save/load screen is up
{
displayLoadSave();
}
return true;
}
// ////////////////////////////////////////////////////////////////////////////
// Multi Player Menu
BOOL startMultiPlayerMenu(void)
{
addBackdrop();
addTopForm();
addBottomForm();
addSideText (FRONTEND_SIDETEXT , FRONTEND_SIDEX,FRONTEND_SIDEY,_("MULTI PLAYER"));
addTextButton(FRONTEND_HOST, FRONTEND_POS2X,FRONTEND_POS2Y, _("Host Game"),false,false);
addTextButton(FRONTEND_JOIN, FRONTEND_POS3X,FRONTEND_POS3Y, _("Join Game"),false,false);
addTextButton(FRONTEND_SKIRMISH, FRONTEND_POS4X,FRONTEND_POS4Y, _("One Player Skirmish"),false,false);
addMultiBut(psWScreen, FRONTEND_BOTFORM, FRONTEND_QUIT, 10, 10, 30, 29, P_("menu", "Return"), IMAGE_RETURN, IMAGE_RETURN_HI, IMAGE_RETURN_HI);
return true;
}
BOOL runMultiPlayerMenu(void)
{
UDWORD id;
id = widgRunScreen(psWScreen); // Run the current set of widgets
switch(id)
{
case FRONTEND_SKIRMISH:
NetPlay.bComms = false; // use network = false
case FRONTEND_HOST:
ingame.bHostSetup = true;
changeTitleMode(MULTIOPTION);
break;
case FRONTEND_JOIN:
ingame.bHostSetup = false;
changeTitleMode(PROTOCOL);
break;
case FRONTEND_QUIT:
changeTitleMode(TITLE);
break;
default:
break;
}
widgDisplayScreen(psWScreen); // show the widgets currently running
return true;
}
// ////////////////////////////////////////////////////////////////////////////
// Options Menu
BOOL startOptionsMenu(void)
{
sliderEnableDrag(true);
addBackdrop();
addTopForm();
addBottomForm();
addSideText (FRONTEND_SIDETEXT , FRONTEND_SIDEX,FRONTEND_SIDEY, _("GAME OPTIONS"));
addTextButton(FRONTEND_GAMEOPTIONS, FRONTEND_POS2X,FRONTEND_POS2Y, _("Game Options"),false,false);
addTextButton(FRONTEND_GAMEOPTIONS2,FRONTEND_POS3X,FRONTEND_POS3Y, _("Graphics Options"),false,false);
addTextButton(FRONTEND_GAMEOPTIONS4, FRONTEND_POS4X,FRONTEND_POS4Y, _("Video Options"), false, false);
addTextButton(FRONTEND_GAMEOPTIONS3, FRONTEND_POS5X,FRONTEND_POS5Y, _("Audio Options"),false,false);
addTextButton(FRONTEND_KEYMAP, FRONTEND_POS6X,FRONTEND_POS6Y, _("Key Mappings"),false,false);
addMultiBut(psWScreen, FRONTEND_BOTFORM, FRONTEND_QUIT, 10, 10, 30, 29, P_("menu", "Return"), IMAGE_RETURN, IMAGE_RETURN_HI, IMAGE_RETURN_HI);
return true;
}
BOOL runOptionsMenu(void)
{
UDWORD id;
id = widgRunScreen(psWScreen); // Run the current set of widgets
switch(id)
{
case FRONTEND_GAMEOPTIONS:
changeTitleMode(GAME);
break;
case FRONTEND_GAMEOPTIONS2:
changeTitleMode(GAME2);
break;
case FRONTEND_GAMEOPTIONS3:
changeTitleMode(GAME3);
break;
case FRONTEND_GAMEOPTIONS4:
changeTitleMode(GAME4);
break;
// case FRONTEND_VIDEO:
// changeTitleMode(VIDEO);
// break;
// case FRONTEND_GRAPHICS:
// changeTitleMode(GRAPHICS);
// break;
case FRONTEND_KEYMAP:
changeTitleMode(KEYMAP);
break;
case FRONTEND_QUIT:
changeTitleMode(TITLE);
break;
default:
break;
}
// If close button pressed then return from this menu.
if(CancelPressed()) {
changeTitleMode(TITLE);
}
widgDisplayScreen(psWScreen); // show the widgets currently running
return true;
}
// ////////////////////////////////////////////////////////////////////////////
// Game Options Menu 2!
BOOL startGameOptions2Menu(void)
{
addBackdrop();
addTopForm();
addBottomForm();
////////////
// mouseflip
addTextButton(FRONTEND_MFLIP, FRONTEND_POS2X-35, FRONTEND_POS2Y, _("Reverse Mouse"),true,false);
if( getInvertMouseStatus() )
{// flipped
addTextButton(FRONTEND_MFLIP_R, FRONTEND_POS2M-55, FRONTEND_POS2Y, _("On"),true,false);
}
else
{ // not flipped
addTextButton(FRONTEND_MFLIP_R, FRONTEND_POS2M-55, FRONTEND_POS2Y, _("Off"),true,false);
}
////////////
// screenshake
addTextButton(FRONTEND_SSHAKE, FRONTEND_POS3X-35, FRONTEND_POS3Y, _("Screen Shake"),true,false);
if(getShakeStatus())
{// shaking on
addTextButton(FRONTEND_SSHAKE_R, FRONTEND_POS3M-55, FRONTEND_POS3Y, _("On"),true,false);
}
else
{//shaking off.
addTextButton(FRONTEND_SSHAKE_R, FRONTEND_POS3M-55, FRONTEND_POS3Y, _("Off"),true,false);
}
////////////
// fog
addTextButton(FRONTEND_FOGTYPE, FRONTEND_POS4X-35, FRONTEND_POS4Y, _("Fog"),true,false);
if(war_GetFog())
{
addTextButton(FRONTEND_FOGTYPE_R,FRONTEND_POS4M-55,FRONTEND_POS4Y, _("Mist"),true,false);
}
else
{
addTextButton(FRONTEND_FOGTYPE_R,FRONTEND_POS4M-55,FRONTEND_POS4Y, _("Fog Of War"),true,false);
}
// ////////////
// //sequence mode.
addTextButton(FRONTEND_SEQUENCE, FRONTEND_POS6X-35,FRONTEND_POS6Y, _("Video Playback"),true,false);
if (war_GetSeqMode() == SEQ_FULL)
{
addTextButton(FRONTEND_SEQUENCE_R, FRONTEND_POS6M-55,FRONTEND_POS6Y, _("Full"),true,false);
}
else if (war_GetSeqMode() == SEQ_SMALL)
{
addTextButton(FRONTEND_SEQUENCE_R, FRONTEND_POS6M-55,FRONTEND_POS6Y, _("Windowed"),true,false); }
else
{
addTextButton(FRONTEND_SEQUENCE_R, FRONTEND_POS6M-55,FRONTEND_POS6Y, _("Minimal"),true,false);
}
////////////
//subtitle mode.
if(war_GetAllowSubtitles())
{
addTextButton(FRONTEND_SUBTITLES, FRONTEND_POS5X-35,FRONTEND_POS5Y, _("Subtitles"),true,false);
}
else
{
addTextButton(FRONTEND_SUBTITLES, FRONTEND_POS5X-35,FRONTEND_POS5Y, _("Subtitles"),true,true);
}
if(war_GetAllowSubtitles())
{
if ( !seq_GetSubtitles() )
{
addTextButton(FRONTEND_SUBTITLES_R, FRONTEND_POS5M-55,FRONTEND_POS5Y, _("Off"),true,false);
}
else
{
addTextButton(FRONTEND_SUBTITLES_R, FRONTEND_POS5M-55,FRONTEND_POS5Y, _("On"),true,false);
}
}
else
{
addTextButton(FRONTEND_SUBTITLES_R, FRONTEND_POS5M - 55, FRONTEND_POS5Y, _("Off"), true, true);
}
////////////
//shadows
addTextButton(FRONTEND_SHADOWS, FRONTEND_POS7X - 35, FRONTEND_POS7Y, _("Shadows"), true, false);
if (getDrawShadows())
{
addTextButton(FRONTEND_SHADOWS_R, FRONTEND_POS7M - 55, FRONTEND_POS7Y, _("On"), true, false);
}
else
{ // not flipped
addTextButton(FRONTEND_SHADOWS_R, FRONTEND_POS7M - 55, FRONTEND_POS7Y, _("Off"), true, false);
}
////////////
// quit.
addMultiBut(psWScreen, FRONTEND_BOTFORM, FRONTEND_QUIT, 10, 10, 30, 29, P_("menu", "Return"), IMAGE_RETURN, IMAGE_RETURN_HI, IMAGE_RETURN_HI);
return true;
}
BOOL runGameOptions2Menu(void)
{
UDWORD id;
id = widgRunScreen(psWScreen); // Run the current set of widgets
switch(id)
{
case FRONTEND_SSHAKE:
case FRONTEND_SSHAKE_R:
if( getShakeStatus() )
{
setShakeStatus(false);
widgSetString(psWScreen,FRONTEND_SSHAKE_R, _("Off"));
}
else
{
setShakeStatus(true);
widgSetString(psWScreen,FRONTEND_SSHAKE_R, _("On"));
}
break;
break;
case FRONTEND_MFLIP:
case FRONTEND_MFLIP_R:
if( getInvertMouseStatus() )
{// flipped
setInvertMouseStatus(false);
widgSetString(psWScreen,FRONTEND_MFLIP_R, _("Off"));
}
else
{ // not flipped
setInvertMouseStatus(true);
widgSetString(psWScreen,FRONTEND_MFLIP_R, _("On"));
}
break;
case FRONTEND_FOGTYPE:
case FRONTEND_FOGTYPE_R:
if (war_GetFog())
{ // turn off crap fog, turn on vis fog.
debug(LOG_FOG, "runGameOptions2Menu: Fog of war ON, visual fog OFF");
war_SetFog(false);
avSetStatus(true);
widgSetString(psWScreen,FRONTEND_FOGTYPE_R, _("Fog Of War"));
}
else
{ // turn off vis fog, turn on normal crap fog.
debug(LOG_FOG, "runGameOptions2Menu: Fog of war OFF, visual fog ON");
avSetStatus(false);
war_SetFog(true);
widgSetString(psWScreen,FRONTEND_FOGTYPE_R, _("Mist"));
}
break;
case FRONTEND_QUIT:
changeTitleMode(OPTIONS);
break;
case FRONTEND_SUBTITLES:
case FRONTEND_SUBTITLES_R:
if( seq_GetSubtitles())
{// turn off
seq_SetSubtitles(false);
widgSetString(psWScreen,FRONTEND_SUBTITLES_R,_("Off"));
}
else
{// turn on
seq_SetSubtitles(true);
widgSetString(psWScreen,FRONTEND_SUBTITLES_R,_("On"));
}
break;
case FRONTEND_SHADOWS:
case FRONTEND_SHADOWS_R:
setDrawShadows(!getDrawShadows());
if (getDrawShadows())
{
widgSetString(psWScreen, FRONTEND_SHADOWS_R, _("On"));
}
else
{
widgSetString(psWScreen, FRONTEND_SHADOWS_R, _("Off"));
}
break;
case FRONTEND_SEQUENCE:
case FRONTEND_SEQUENCE_R:
if( war_GetSeqMode() == SEQ_FULL )
{
war_SetSeqMode(SEQ_SMALL);
widgSetString(psWScreen,FRONTEND_SEQUENCE_R, _("Windowed"));
}
else if( war_GetSeqMode() == SEQ_SMALL )
{
war_SetSeqMode(SEQ_SKIP);
widgSetString(psWScreen,FRONTEND_SEQUENCE_R, _("Minimal"));
}
else
{
war_SetSeqMode(SEQ_FULL);
widgSetString(psWScreen,FRONTEND_SEQUENCE_R, _("Full"));
}
break;
default:
break;
}
// If close button pressed then return from this menu.
if(CancelPressed()) {
changeTitleMode(OPTIONS);
}
widgDisplayScreen(psWScreen); // show the widgets currently running
return true;
}
// ////////////////////////////////////////////////////////////////////////////
// Game Options Menu
BOOL startGameOptions3Menu(void)
{
addBackdrop();
addTopForm();
addBottomForm();
// 2d audio
addTextButton(FRONTEND_FX, FRONTEND_POS2X-25,FRONTEND_POS2Y, _("Voice Volume"),true,false);
addFESlider(FRONTEND_FX_SL, FRONTEND_BOTFORM, FRONTEND_POS2M, FRONTEND_POS2Y+5, AUDIO_VOL_MAX, (int)(sound_GetUIVolume() * 100.0), FRONTEND_FX );
// 3d audio
addTextButton(FRONTEND_3D_FX, FRONTEND_POS3X-25,FRONTEND_POS3Y, _("FX Volume"),true,false);
addFESlider(FRONTEND_3D_FX_SL, FRONTEND_BOTFORM, FRONTEND_POS3M, FRONTEND_POS3Y+5, AUDIO_VOL_MAX, (int)(sound_GetEffectsVolume() * 100.0), FRONTEND_3D_FX );
// cd audio
addTextButton(FRONTEND_MUSIC, FRONTEND_POS4X-25,FRONTEND_POS4Y, _("Music Volume"),true,false);
addFESlider(FRONTEND_MUSIC_SL, FRONTEND_BOTFORM, FRONTEND_POS4M, FRONTEND_POS4Y+5, AUDIO_VOL_MAX, (int)(sound_GetMusicVolume() * 100.0), FRONTEND_MUSIC );
// quit.
addMultiBut(psWScreen, FRONTEND_BOTFORM, FRONTEND_QUIT, 10, 10, 30, 29, P_("menu", "Return"), IMAGE_RETURN, IMAGE_RETURN_HI, IMAGE_RETURN_HI);
//add some text down the side of the form
addSideText (FRONTEND_SIDETEXT , FRONTEND_SIDEX,FRONTEND_SIDEY, _("GAME OPTIONS"));
return true;
}
BOOL runGameOptions3Menu(void)
{
UDWORD id;
id = widgRunScreen(psWScreen); // Run the current set of widgets
switch(id)
{
case FRONTEND_FX:
case FRONTEND_3D_FX:
case FRONTEND_MUSIC:
break;
case FRONTEND_FX_SL:
sound_SetUIVolume((float)widgGetSliderPos(psWScreen,FRONTEND_FX_SL) / 100.0);
break;
case FRONTEND_3D_FX_SL:
sound_SetEffectsVolume((float)widgGetSliderPos(psWScreen,FRONTEND_3D_FX_SL) / 100.0);
break;
case FRONTEND_MUSIC_SL:
sound_SetMusicVolume((float)widgGetSliderPos(psWScreen, FRONTEND_MUSIC_SL) / 100.0);
break;
case FRONTEND_QUIT:
changeTitleMode(OPTIONS);
break;
default:
break;
}
// If close button pressed then return from this menu.
if(CancelPressed()) {
changeTitleMode(TITLE);
}
widgDisplayScreen(psWScreen); // show the widgets currently running
return true;
}
// Additional graphics game options menu
BOOL startGameOptions4Menu(void)
{
// Generate the resolution string
snprintf(resolution, WIDG_MAXSTR, "%d x %d",
war_GetWidth(), war_GetHeight());
// Generate texture size string
snprintf(textureSize, WIDG_MAXSTR, "%d", getTextureSize());
addBackdrop();
addTopForm();
addBottomForm();
// Fullscreen/windowed
addTextButton(FRONTEND_WINDOWMODE, FRONTEND_POS2X-35, FRONTEND_POS2Y, _("Graphics Mode*"), true, false);
if (war_getFullscreen())
{
addTextButton(FRONTEND_WINDOWMODE_R, FRONTEND_POS2M-55, FRONTEND_POS2Y, _("Fullscreen"), true, false);
}
else
{
addTextButton(FRONTEND_WINDOWMODE_R, FRONTEND_POS2M-55, FRONTEND_POS2Y, _("Windowed"), true, false);
}
// Resolution
addTextButton(FRONTEND_RESOLUTION, FRONTEND_POS3X-35, FRONTEND_POS3Y, _("Resolution*"), true, false);
addTextButton(FRONTEND_RESOLUTION_R, FRONTEND_POS3M-55, FRONTEND_POS3Y, resolution, true, false);
widgSetString(psWScreen, FRONTEND_RESOLUTION_R, resolution);
// Cursor trapping
addTextButton(FRONTEND_TRAP, FRONTEND_POS4X-35, FRONTEND_POS4Y, _("Trap Cursor"), true, false);
if (war_GetTrapCursor())
{
addTextButton(FRONTEND_TRAP_R, FRONTEND_POS4M-55, FRONTEND_POS4Y, _("On"), true, false);
}
else
{
addTextButton(FRONTEND_TRAP_R, FRONTEND_POS4M-55, FRONTEND_POS4Y, _("Off"), true, false);
}
// Texture size
addTextButton(FRONTEND_TEXTURESZ, FRONTEND_POS5X-35, FRONTEND_POS5Y, _("Texture size"), true, false);
addTextButton(FRONTEND_TEXTURESZ_R, FRONTEND_POS5M-55, FRONTEND_POS5Y, textureSize, true, false);
// Add a note about changes taking effect on restart for certain options
addTextButton(FRONTEND_TAKESEFFECT, FRONTEND_POS6X-35, FRONTEND_POS6Y, _("* Takes effect on game restart"), true, true);
// Quit/return
addMultiBut(psWScreen, FRONTEND_BOTFORM, FRONTEND_QUIT, 10, 10, 30, 29, P_("menu", "Return"), IMAGE_RETURN, IMAGE_RETURN_HI, IMAGE_RETURN_HI);
return true;
}
BOOL runGameOptions4Menu(void)
{
SDL_Rect **modes = SDL_ListModes(NULL, SDL_FULLSCREEN | SDL_HWSURFACE);
UDWORD id = widgRunScreen(psWScreen);
switch (id)
{
case FRONTEND_WINDOWMODE:
case FRONTEND_WINDOWMODE_R:
if (war_getFullscreen())
{
war_setFullscreen(false);
widgSetString(psWScreen, FRONTEND_WINDOWMODE_R, _("Windowed"));
}
else
{
war_setFullscreen(true);
widgSetString(psWScreen, FRONTEND_WINDOWMODE_R, _("Fullscreen"));
}
break;
case FRONTEND_RESOLUTION:
case FRONTEND_RESOLUTION_R:
{
int current, count;
// Get the current mode offset
for (count = 0, current = 0; modes[count]; count++)
{
if (war_GetWidth() == modes[count]->w
&& war_GetHeight() == modes[count]->h)
{
current = count;
}
}
// Increment and clip if required
if (++current == count)
current = 0;
// Set the new width and height (takes effect on restart)
war_SetWidth(modes[current]->w);
war_SetHeight(modes[current]->h);
// Generate the textual representation of the new width and height
snprintf(resolution, WIDG_MAXSTR, "%d x %d", modes[current]->w,
modes[current]->h);
// Update the widget
widgSetString(psWScreen, FRONTEND_RESOLUTION_R, resolution);
break;
}
case FRONTEND_TRAP:
case FRONTEND_TRAP_R:
if (war_GetTrapCursor())
{
war_SetTrapCursor(false);
widgSetString(psWScreen, FRONTEND_TRAP_R, _("Off"));
}
else
{
war_SetTrapCursor(true);
widgSetString(psWScreen, FRONTEND_TRAP_R, _("On"));
}
break;
case FRONTEND_TEXTURESZ:
case FRONTEND_TEXTURESZ_R:
{
int newTexSize = getTextureSize() * 2;
// Clip such that 32 <= size <= 128
if (newTexSize > 128)
{
newTexSize = 32;
}
// Set the new size
setTextureSize(newTexSize);
// Generate the string representation of the new size
snprintf(textureSize, WIDG_MAXSTR, "%d", newTexSize);
// Update the widget
widgSetString(psWScreen, FRONTEND_TEXTURESZ_R, textureSize);
break;
}
case FRONTEND_QUIT:
changeTitleMode(OPTIONS);
break;
default:
break;
}
if (CancelPressed())
{
changeTitleMode(OPTIONS);
}
widgDisplayScreen(psWScreen);
return true;
}
// ////////////////////////////////////////////////////////////////////////////
// Game Options Menu
BOOL startGameOptionsMenu(void)
{
UDWORD w, h;
addBackdrop();
addTopForm();
addBottomForm();
// Difficulty
addTextButton(FRONTEND_DIFFICULTY, FRONTEND_POS2X-25, FRONTEND_POS2Y, _("Difficulty"), true, false);
switch (getDifficultyLevel())
{
case DL_EASY:
addTextButton(FRONTEND_DIFFICULTY_R, FRONTEND_POS2M-25, FRONTEND_POS2Y, _("Easy"), true, false);
break;
case DL_NORMAL:
addTextButton(FRONTEND_DIFFICULTY_R, FRONTEND_POS2M-25,FRONTEND_POS2Y, _("Normal"), true, false);
break;
case DL_HARD:
default:
addTextButton(FRONTEND_DIFFICULTY_R, FRONTEND_POS2M-25, FRONTEND_POS2Y, _("Hard"), true, false);
break;
}
// Scroll speed
addTextButton(FRONTEND_SCROLLSPEED, FRONTEND_POS3X-25, FRONTEND_POS3Y, _("Scroll Speed"), true, false);
addFESlider(FRONTEND_SCROLLSPEED_SL, FRONTEND_BOTFORM, FRONTEND_POS3M, FRONTEND_POS3Y+5, 16, scroll_speed_accel / 100, FRONTEND_SCROLLSPEED);
// Colour stuff
w = iV_GetImageWidth(FrontImages, IMAGE_PLAYER0);
h = iV_GetImageHeight(FrontImages, IMAGE_PLAYER0);
addMultiBut(psWScreen, FRONTEND_BOTFORM, FE_P0, FRONTEND_POS4M+(0*(w+6)), FRONTEND_POS4Y, w, h, "", IMAGE_PLAYER0, IMAGE_PLAYERX, true);
addMultiBut(psWScreen, FRONTEND_BOTFORM, FE_P4, FRONTEND_POS4M+(1*(w+6)), FRONTEND_POS4Y, w, h, "", IMAGE_PLAYER4, IMAGE_PLAYERX, true);
addMultiBut(psWScreen, FRONTEND_BOTFORM, FE_P5, FRONTEND_POS4M+(2*(w+6)), FRONTEND_POS4Y, w, h, "", IMAGE_PLAYER5, IMAGE_PLAYERX, true);
addMultiBut(psWScreen, FRONTEND_BOTFORM, FE_P6, FRONTEND_POS4M+(3*(w+6)), FRONTEND_POS4Y, w, h, "", IMAGE_PLAYER6, IMAGE_PLAYERX, true);
addMultiBut(psWScreen, FRONTEND_BOTFORM, FE_P7, FRONTEND_POS4M+(4*(w+6)), FRONTEND_POS4Y, w, h, "", IMAGE_PLAYER7, IMAGE_PLAYERX, true);
// language
addTextButton(FRONTEND_LANGUAGE, FRONTEND_POS2X - 25, FRONTEND_POS5Y, _("Language"), true, false);
addTextButton(FRONTEND_LANGUAGE_R, FRONTEND_POS2M - 25, FRONTEND_POS5Y, getLanguageName(), true, false);
widgSetButtonState(psWScreen, FE_P0 + getPlayerColour(0), WBUT_LOCK);
addTextButton(FRONTEND_COLOUR, FRONTEND_POS4X-25, FRONTEND_POS4Y, _("Unit Colour"), true, false);
// Quit
addMultiBut(psWScreen, FRONTEND_BOTFORM, FRONTEND_QUIT, 10, 10, 30, 29, P_("menu", "Return"), IMAGE_RETURN, IMAGE_RETURN_HI, IMAGE_RETURN_HI);
// Add some text down the side of the form
addSideText(FRONTEND_SIDETEXT, FRONTEND_SIDEX, FRONTEND_SIDEY, _("GAME OPTIONS"));
return true;
}
BOOL runGameOptionsMenu(void)
{
UDWORD id;
id = widgRunScreen(psWScreen); // Run the current set of widgets
switch(id)
{
case FRONTEND_LANGUAGE_R:
setNextLanguage();
widgSetString(psWScreen, FRONTEND_LANGUAGE_R, getLanguageName());
/* Hack to reset current menu text, which looks fancy. */
widgSetString(psWScreen, FRONTEND_LANGUAGE, _("Language"));
widgSetString(psWScreen, FRONTEND_COLOUR, _("Unit Colour"));
widgSetString(psWScreen, FRONTEND_DIFFICULTY, _("Difficulty"));
widgSetString(psWScreen, FRONTEND_SCROLLSPEED,_("Scroll Speed"));
widgSetString(psWScreen, FRONTEND_SIDETEXT, _("GAME OPTIONS"));
// FIXME: Changing the below return button tooltip does not work.
//widgSetString(psWScreen, FRONTEND_BOTFORM, P_("menu", "Return"));
switch( getDifficultyLevel() )
{
case DL_EASY:
widgSetString(psWScreen,FRONTEND_DIFFICULTY_R, _("Easy"));
break;
case DL_NORMAL:
widgSetString(psWScreen,FRONTEND_DIFFICULTY_R, _("Normal"));
break;
case DL_HARD:
widgSetString(psWScreen,FRONTEND_DIFFICULTY_R, _("Hard") );
break;
case DL_TOUGH:
case DL_KILLER:
debug(LOG_ERROR, "runGameOptionsMenu: Unused difficulty level selected!");
break;
}
break;
// case FRONTEND_GAMMA:
case FRONTEND_SCROLLSPEED:
break;
case FRONTEND_DIFFICULTY:
case FRONTEND_DIFFICULTY_R:
switch( getDifficultyLevel() )
{
case DL_EASY:
setDifficultyLevel(DL_NORMAL);
widgSetString(psWScreen,FRONTEND_DIFFICULTY_R, _("Normal"));
break;
case DL_NORMAL:
setDifficultyLevel(DL_HARD);
widgSetString(psWScreen,FRONTEND_DIFFICULTY_R, _("Hard") );
break;
case DL_HARD:
setDifficultyLevel(DL_EASY);
widgSetString(psWScreen,FRONTEND_DIFFICULTY_R, _("Easy"));
break;
default: // DL_TOUGH and DL_KILLER
break;
}
break;
case FRONTEND_SCROLLSPEED_SL:
scroll_speed_accel = widgGetSliderPos(psWScreen,FRONTEND_SCROLLSPEED_SL) * 100; //0-1600
if(scroll_speed_accel ==0) // make sure you CAN scroll.
{
scroll_speed_accel = 100;
}
break;
case FRONTEND_QUIT:
changeTitleMode(OPTIONS);
break;
case FE_P0:
widgSetButtonState(psWScreen, FE_P0, WBUT_LOCK);
widgSetButtonState(psWScreen, FE_P4, 0);
widgSetButtonState(psWScreen, FE_P5, 0);
widgSetButtonState(psWScreen, FE_P6, 0);
widgSetButtonState(psWScreen, FE_P7, 0);
setPlayerColour(0,0);
break;
case FE_P4:
widgSetButtonState(psWScreen, FE_P0, 0);
widgSetButtonState(psWScreen, FE_P4, WBUT_LOCK);
widgSetButtonState(psWScreen, FE_P5, 0);
widgSetButtonState(psWScreen, FE_P6, 0);
widgSetButtonState(psWScreen, FE_P7, 0);
setPlayerColour(0,4);
break;
case FE_P5:
widgSetButtonState(psWScreen, FE_P0, 0);
widgSetButtonState(psWScreen, FE_P4, 0);
widgSetButtonState(psWScreen, FE_P5, WBUT_LOCK);
widgSetButtonState(psWScreen, FE_P6, 0);
widgSetButtonState(psWScreen, FE_P7, 0);
setPlayerColour(0,5);
break;
case FE_P6:
widgSetButtonState(psWScreen, FE_P0, 0);
widgSetButtonState(psWScreen, FE_P4, 0);
widgSetButtonState(psWScreen, FE_P5, 0);
widgSetButtonState(psWScreen, FE_P6, WBUT_LOCK);
widgSetButtonState(psWScreen, FE_P7, 0);
setPlayerColour(0,6);
break;
case FE_P7:
widgSetButtonState(psWScreen, FE_P0, 0);
widgSetButtonState(psWScreen, FE_P4, 0);
widgSetButtonState(psWScreen, FE_P5, 0);
widgSetButtonState(psWScreen, FE_P6, 0);
widgSetButtonState(psWScreen, FE_P7, WBUT_LOCK);
setPlayerColour(0,7);
break;
default:
break;
}
// If close button pressed then return from this menu.
if(CancelPressed()) {
changeTitleMode(TITLE);
}
widgDisplayScreen(psWScreen); // show the widgets currently running
return true;
}
// ////////////////////////////////////////////////////////////////////////////
// ////////////////////////////////////////////////////////////////////////////
// ////////////////////////////////////////////////////////////////////////////
// common widgets.
void addBackdrop(void)
{
W_FORMINIT sFormInit;
memset(&sFormInit, 0, sizeof(W_FORMINIT)); // Backdrop
sFormInit.formID = 0;
sFormInit.id = FRONTEND_BACKDROP;
sFormInit.style = WFORM_PLAIN;
sFormInit.x = (SWORD)( (pie_GetVideoBufferWidth() - HIDDEN_FRONTEND_WIDTH)/2);
sFormInit.y = (SWORD)( (pie_GetVideoBufferHeight() - HIDDEN_FRONTEND_HEIGHT)/2);
sFormInit.width = HIDDEN_FRONTEND_WIDTH-1;
sFormInit.height = HIDDEN_FRONTEND_HEIGHT-1;
sFormInit.pDisplay = displayTitleBitmap;
widgAddForm(psWScreen, &sFormInit);
}
// ////////////////////////////////////////////////////////////////////////////
void removeBackdrop(void)
{
widgDelete( psWScreen, FRONTEND_BACKDROP );
}
// ////////////////////////////////////////////////////////////////////////////
void addBottomForm(void)
{
W_FORMINIT sFormInit;
memset(&sFormInit, 0, sizeof(W_FORMINIT));
sFormInit.formID = FRONTEND_BACKDROP;
sFormInit.id = FRONTEND_BOTFORM;
sFormInit.style = WFORM_PLAIN;
sFormInit.x = FRONTEND_BOTFORMX;
sFormInit.y = FRONTEND_BOTFORMY;
sFormInit.width = FRONTEND_BOTFORMW;
sFormInit.height = FRONTEND_BOTFORMH;
sFormInit.pDisplay = intOpenPlainForm;
sFormInit.disableChildren = true;
widgAddForm(psWScreen, &sFormInit);
}
// ////////////////////////////////////////////////////////////////////////////
void removeBottomForm( void )
{
widgDelete( psWScreen, FRONTEND_BOTFORM );
}
// ////////////////////////////////////////////////////////////////////////////
void addTopForm(void)
{
W_FORMINIT sFormInit;
memset(&sFormInit, 0, sizeof(W_FORMINIT));
sFormInit.formID = FRONTEND_BACKDROP;
sFormInit.id = FRONTEND_TOPFORM;
sFormInit.style = WFORM_PLAIN;
if(titleMode == MULTIOPTION)
{
sFormInit.x = FRONTEND_TOPFORM_WIDEX;
sFormInit.y = FRONTEND_TOPFORM_WIDEY;
sFormInit.width = FRONTEND_TOPFORM_WIDEW;
sFormInit.height= FRONTEND_TOPFORM_WIDEH;
}
else
{
sFormInit.x = FRONTEND_TOPFORMX;
sFormInit.y = FRONTEND_TOPFORMY;
sFormInit.width = FRONTEND_TOPFORMW;
sFormInit.height= FRONTEND_TOPFORMH;
}
sFormInit.pDisplay = intDisplayPlainForm;
widgAddForm(psWScreen, &sFormInit);
sFormInit.formID= FRONTEND_TOPFORM;
sFormInit.id = FRONTEND_LOGO;
sFormInit.x = (short)((sFormInit.width/2)-(FRONTEND_LOGOW/2)); //115;
sFormInit.y = (short)((sFormInit.height/2)-(FRONTEND_LOGOH/2));//18;
sFormInit.width = FRONTEND_LOGOW;
sFormInit.height= FRONTEND_LOGOH;
sFormInit.pDisplay= displayLogo;
widgAddForm(psWScreen, &sFormInit);
}
// ////////////////////////////////////////////////////////////////////////////
void removeTopForm( void )
{
widgDelete( psWScreen, FRONTEND_TOPFORM );
}
// ////////////////////////////////////////////////////////////////////////////
void addTextButton(UDWORD id, UDWORD PosX, UDWORD PosY, const char *txt,BOOL bAlign,BOOL bGrey)
{
W_BUTINIT sButInit;
memset(&sButInit, 0, sizeof(W_BUTINIT));
sButInit.formID = FRONTEND_BOTFORM;
sButInit.id = id;
sButInit.x = (short)PosX;
sButInit.y = (short)PosY;
if(bAlign)
{
sButInit.style = WBUT_PLAIN;
sButInit.width = (short)(iV_GetTextWidth(txt)+10);//FRONTEND_BUTWIDTH;
sButInit.x+=35;
}
else
{
sButInit.style = WBUT_PLAIN | WBUT_TXTCENTRE;
sButInit.width = FRONTEND_BUTWIDTH;
}
sButInit.UserData = bGrey; // store disable state
sButInit.height = FRONTEND_BUTHEIGHT;
sButInit.pDisplay = displayTextOption;
sButInit.FontID = font_large;
sButInit.pText = txt;
widgAddButton(psWScreen, &sButInit);
if(bGrey) // dont allow clicks to this button...
{
widgSetButtonState(psWScreen,id,WBUT_DISABLE);
}
}
// ////////////////////////////////////////////////////////////////////////////
void addFESlider(UDWORD id, UDWORD parent, UDWORD x,UDWORD y,UDWORD stops,UDWORD pos,UDWORD attachID )
{
W_SLDINIT sSldInit;
memset(&sSldInit, 0, sizeof(W_SLDINIT));
sSldInit.formID = parent;
sSldInit.id = id;
sSldInit.style = WSLD_PLAIN;
sSldInit.x = (short)x;
sSldInit.y = (short)y;
sSldInit.width = iV_GetImageWidth(IntImages,IMAGE_SLIDER_BIG);
sSldInit.height = iV_GetImageHeight(IntImages,IMAGE_SLIDER_BIG);
sSldInit.orientation= WSLD_LEFT;
sSldInit.numStops = (UBYTE) stops;
sSldInit.barSize = iV_GetImageHeight(IntImages,IMAGE_SLIDER_BIG);
sSldInit.pos = (UBYTE) pos;
sSldInit.pDisplay = displayBigSlider;
sSldInit.pCallback = intUpdateQuantitySlider;
widgAddSlider(psWScreen, &sSldInit);
}
// ////////////////////////////////////////////////////////////////////////////
void addSideText(UDWORD id, UDWORD PosX, UDWORD PosY, const char *txt)
{
W_LABINIT sLabInit;
memset(&sLabInit, 0, sizeof(W_LABINIT));
sLabInit.formID = FRONTEND_BACKDROP;
sLabInit.id = id;
sLabInit.style = WLAB_PLAIN;
sLabInit.x = (short) PosX;
sLabInit.y = (short) PosY;
sLabInit.width = 30;
sLabInit.height = FRONTEND_BOTFORMH;
sLabInit.FontID = font_large;
sLabInit.pDisplay = displayTextAt270;
sLabInit.pText = txt;
widgAddLabel(psWScreen, &sLabInit);
}
// ////////////////////////////////////////////////////////////////////////////
// drawing functions
// show a background piccy
static void displayTitleBitmap(WZ_DECL_UNUSED WIDGET *psWidget, WZ_DECL_UNUSED UDWORD xOffset, WZ_DECL_UNUSED UDWORD yOffset, WZ_DECL_UNUSED PIELIGHT *pColours)
{
iV_SetFont(font_regular);
iV_SetTextColour(WZCOL_TEXT_BRIGHT);
iV_DrawTextRotated(version_getFormattedVersionString(), pie_GetVideoBufferWidth() - 10, pie_GetVideoBufferHeight() - 15, 270.f);
}
// ////////////////////////////////////////////////////////////////////////////
// show warzone logo
void displayLogo(WIDGET *psWidget, UDWORD xOffset, UDWORD yOffset, WZ_DECL_UNUSED PIELIGHT *pColours)
{
iV_DrawImage(FrontImages,IMAGE_FE_LOGO,xOffset+psWidget->x,yOffset+psWidget->y);
}
// ////////////////////////////////////////////////////////////////////////////
// show a text option.
void displayTextOption(WIDGET *psWidget, UDWORD xOffset, UDWORD yOffset, WZ_DECL_UNUSED PIELIGHT *pColours)
{
SDWORD fx,fy, fw;
W_BUTTON *psBut;
BOOL hilight = false;
BOOL greyOut = psWidget->UserData; // if option is unavailable.
psBut = (W_BUTTON *)psWidget;
iV_SetFont(psBut->FontID);
if(widgGetMouseOver(psWScreen) == psBut->id) // if mouse is over text then hilight.
{
hilight = true;
}
fw = iV_GetTextWidth(psBut->pText);
fy = yOffset + psWidget->y + (psWidget->height - iV_GetTextLineSize())/2 - iV_GetTextAboveBase();
if (psWidget->style & WBUT_TXTCENTRE) //check for centering, calculate offset.
{
fx = xOffset + psWidget->x + ((psWidget->width - fw) / 2);
}
else
{
fx = xOffset + psWidget->x;
}
if(greyOut) // unavailable
{
iV_SetTextColour(WZCOL_TEXT_DARK);
}
else // available
{
if(hilight) // hilight
{
iV_SetTextColour(WZCOL_TEXT_BRIGHT);
}
else // dont highlight
{
iV_SetTextColour(WZCOL_TEXT_MEDIUM);
}
}
iV_DrawText( psBut->pText, fx, fy);
return;
}
// ////////////////////////////////////////////////////////////////////////////
// show text written on its side.
void displayTextAt270(WIDGET *psWidget, UDWORD xOffset, UDWORD yOffset, WZ_DECL_UNUSED PIELIGHT *pColours)
{
SDWORD fx,fy;
W_LABEL *psLab;
psLab = (W_LABEL *)psWidget;
iV_SetFont(font_large);
iV_SetTextColour(WZCOL_TEXT_BRIGHT);
fx = xOffset + psWidget->x;
fy = yOffset + psWidget->y + iV_GetTextWidth(psLab->aText) ;
iV_DrawTextRotated(psLab->aText, fx, fy, 270.f);
}
// ////////////////////////////////////////////////////////////////////////////
// show, well have a guess..
static void displayBigSlider(WIDGET *psWidget, UDWORD xOffset, UDWORD yOffset, WZ_DECL_UNUSED PIELIGHT *pColours)
{
W_SLIDER *Slider = (W_SLIDER*)psWidget;
UDWORD x = xOffset+psWidget->x;
UDWORD y = yOffset+psWidget->y;
SWORD sx;
iV_DrawImage(IntImages,IMAGE_SLIDER_BIG,x+STAT_SLD_OX,y+STAT_SLD_OY); // draw bdrop
sx = (SWORD)((Slider->width-3 - Slider->barSize) * Slider->pos / Slider->numStops); // determine pos.
iV_DrawImage(IntImages,IMAGE_SLIDER_BIGBUT,x+3+sx,y+3); //draw amount
}