460 lines
16 KiB
C
460 lines
16 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
|
|
*/
|
|
/** @file
|
|
* Function definitions for the in game interface code.
|
|
*/
|
|
|
|
#ifndef __INCLUDED_SRC_HCI_H__
|
|
#define __INCLUDED_SRC_HCI_H__
|
|
|
|
#include "lib/ivis_common/pieclip.h"
|
|
#include "lib/widget/widget.h"
|
|
|
|
#include "message.h"
|
|
|
|
// store the objects that are being used for the object bar
|
|
#define MAX_OBJECTS 15 //10 we need at least 15 for the 3 different types of factory
|
|
|
|
#define BASE_COORDS_X (640)
|
|
#define BASE_COORDS_Y (480)
|
|
#define E_W (pie_GetVideoBufferWidth() - BASE_COORDS_X)
|
|
#define E_H (pie_GetVideoBufferHeight() - BASE_COORDS_Y)
|
|
#define D_W ((pie_GetVideoBufferWidth() - BASE_COORDS_X)/2)
|
|
#define D_H ((pie_GetVideoBufferHeight() - BASE_COORDS_Y)/2)
|
|
|
|
|
|
#define IDRET_FORM 1 // The reticule form
|
|
#define IDRET_OPTIONS 2 // option button
|
|
#define IDRET_BUILD 3 // build button
|
|
#define IDRET_MANUFACTURE 4 // manufacture button
|
|
#define IDRET_RESEARCH 5 // research button
|
|
#define IDRET_INTEL_MAP 6 // intelligence map button
|
|
#define IDRET_DESIGN 7 // design droids button
|
|
#define IDRET_CANCEL 8 // central cancel button
|
|
#define IDRET_COMMAND 9 // command droid button
|
|
#define IDRET_TRANSPORTER 10 // transporter button
|
|
#define IDRET_ORDER 11 // droid order button
|
|
#define IDPOW_POWERBAR_T 102 // power bar - trough
|
|
#define IDTRANTIMER_BUTTON 11012 //transporter button on timer display
|
|
|
|
|
|
|
|
/* Object screen IDs */
|
|
|
|
#define IDOBJ_FORM 3000 // The object back form for build/manufacture/research
|
|
#define IDOBJ_CLOSE 3001 // The form for the close button
|
|
#define IDOBJ_OBJSTART 3002 // The first ID for droids/factories/research
|
|
#define IDOBJ_OBJEND 3021 // The last ID for droids/factories/research
|
|
#define IDOBJ_STATSTART 3100 // The first ID for stats
|
|
#define IDOBJ_STATEND 3199 // The last ID for stats
|
|
#define IDOBJ_PROGBARSTART 3200 // The first ID for stats progress bars.
|
|
#define IDOBJ_PROGBAREND 3299 // The last ID for stats progress bars.
|
|
#define IDOBJ_POWERBARSTART 3300 // The first ID for power bars.
|
|
#define IDOBJ_POWERBAREND 3399 // The first ID for power bars.
|
|
#define IDOBJ_COUNTSTART 3400 // The first ID for progress number labels.
|
|
#define IDOBJ_COUNTEND 3499 // The last ID for progress number labels.
|
|
#define IDOBJ_TABFORM 3500 // The object tab form for build/manufacture/research
|
|
#define IDOBJ_FACTORYSTART 3600 // The first ID for factory number labels
|
|
#define IDOBJ_FACTORYEND 3699 // The last ID for factory number labels
|
|
#define IDOBJ_CMDEXPSTART 3700 // The first ID for factory number labels
|
|
#define IDOBJ_CMDEXPEND 3749 // The last ID for factory number labels
|
|
#define IDOBJ_CMDFACSTART 3750 // The first ID for factory number labels
|
|
#define IDOBJ_CMDFACEND 3799 // The last ID for factory number labels
|
|
#define IDOBJ_CMDVTOLFACSTART 3800 // The first ID for VTOL factory number labels
|
|
#define IDOBJ_CMDVTOLFACEND 3849 // The last ID for VTOL factory number labels
|
|
|
|
|
|
#define IDSTAT_FORM 14000 // The stats form for structure/droid/research type
|
|
#define IDSTAT_TITLEFORM 14001 // The form for the close box
|
|
#define IDSTAT_LABEL 14002 // Unused
|
|
#define IDSTAT_CLOSE 14003 // The stats close box
|
|
#define IDSTAT_TABFORM 14004 // The tab form with the stats buttons
|
|
#define IDSTAT_START 14100 // The first stats ID
|
|
#define IDSTAT_END 14999 // The last stats ID enough for 899 things
|
|
#define IDSTAT_TABSCRL_LEFT 15000 // Our left Tab scroll button
|
|
#define IDSTAT_TABSCRL_RIGHT 15002 // Our right Tab scroll button
|
|
//#define IDSTAT_BARSTART 4200
|
|
#define IDSTAT_BAREND 4299
|
|
#define IDSTAT_TIMEBARSTART 4300
|
|
#define IDSTAT_TIMEBAREND 4399
|
|
#define IDSTAT_SLIDER 4400
|
|
#define IDSTAT_SLIDERCOUNT 4401
|
|
#define IDSTAT_INFINITE_BUTTON 4402
|
|
#define IDSTAT_LOOP_BUTTON 4403
|
|
#define IDSTAT_LOOP_LABEL 4404
|
|
#define IDSTAT_DP_BUTTON 4405
|
|
#define IDSTAT_RESICONSTART 4500
|
|
#define IDSTAT_RESICONEND 4599
|
|
#define IDSTAT_PRODSTART 4600
|
|
#define IDSTAT_PRODEND 4699
|
|
#define IDSTAT_MANULIMITS 4700
|
|
|
|
#define IDSTAT_ALLYSTART 4800
|
|
#define IDSTAT_ALLYEND 4900
|
|
|
|
// Reticule position.
|
|
#define RET_X 23
|
|
#define RET_Y (324+E_H)
|
|
#define RET_FORMWIDTH 132
|
|
#define RET_FORMHEIGHT 132
|
|
|
|
/* Option positions */
|
|
#define OPT_GAP 5
|
|
|
|
// Object screen position.
|
|
#define BASE_GAP 6
|
|
#define OBJ_BACKX (RET_X + RET_FORMWIDTH + BASE_GAP + D_W) // X coord of object screen back form.
|
|
#define OBJ_BACKY RET_Y // Y coord of object screen back form.
|
|
#define OBJ_BACKWIDTH 320 //316 // Width of object screen back form.
|
|
#define OBJ_BACKHEIGHT 115 // Height of object screen back form.
|
|
|
|
/* Build screen positions */
|
|
#define OBJ_TABX 2 // X coord of object screen tab form.
|
|
#define OBJ_TABY 6 // Y coord of object screen tab form.
|
|
#define OBJ_WIDTH 316 //312//310 // Width of object screen tab form.
|
|
#define OBJ_HEIGHT 112 // Height of object screen tab form.
|
|
#define OBJ_GAP 2 // Gap between buttons.
|
|
#define OBJ_STARTX 2 // Offset of first obj button from left of tab form.
|
|
#define OBJ_STARTY 42 //44 // Offset of first obj button from top of tab form.
|
|
#define OBJ_STATSTARTY 0
|
|
|
|
//slider bar positions
|
|
|
|
#define STAT_SLDX 8 // Slider x.
|
|
#define STAT_SLDY 4 // Slider y.
|
|
|
|
#define STAT_SLDWIDTH 70 // Slider width.
|
|
#define STAT_SLDHEIGHT 12 //4 // Slider height.
|
|
|
|
// Power bar position.
|
|
#define POW_X OBJ_BACKX
|
|
#define POW_Y (OBJ_BACKY + OBJ_BACKHEIGHT + 6)
|
|
#define POW_BARWIDTH 308
|
|
|
|
#define POW_GAPX 5
|
|
#define POW_GAPY 2
|
|
#define POW_CLICKBARMAJORRED 0xcc
|
|
#define POW_CLICKBARMAJORGREEN 0
|
|
#define POW_CLICKBARMAJORBLUE 0
|
|
|
|
//tab details
|
|
#define OBJ_TABWIDTH 26
|
|
#define OBJ_TABHEIGHT 11
|
|
#define OBJ_TABOFFSET 2
|
|
//tab scroll buttons details
|
|
#define TABSCRL_HEIGHT 10
|
|
#define TABSCRL_WIDTH 7
|
|
|
|
/* close button data */
|
|
#define CLOSE_WIDTH 15
|
|
#define CLOSE_HEIGHT 15
|
|
#define CLOSE_SIZE 15
|
|
|
|
// Stat screen position.
|
|
#define STAT_X 23
|
|
#define STAT_Y (45 + E_H)
|
|
#define STAT_WIDTH RET_FORMWIDTH // Width of the tab form.
|
|
#define STAT_HEIGHT 273 // Height of the tab form.
|
|
#define STAT_TABWIDTH 15
|
|
#define STAT_TABHEIGHT 40
|
|
#define STAT_TABFORMX 0 // Offset of the tab form within the main form.
|
|
#define STAT_TABFORMY 18 // Offset of the tab form within the main form.
|
|
|
|
|
|
// 2 16 bit values packed into a DWORD.
|
|
#define PACKDWORD(a,b) ( ( (a)<<16 ) | (b) )
|
|
#define UNPACKDWORD_HI(a) ( (a)>>16 )
|
|
#define UNPACKDWORD_LOW(a) ( (a) & 0xffff)
|
|
|
|
// 3 10 bit values packed into a DWORD.
|
|
#define PACKDWORD_TRI(a,b,c) ( (((a) & 0x3ff) << 20) | (((b) & 0x3ff) << 10) | ((c) & 0x3ff) )
|
|
#define UNPACKDWORD_TRI_A(a) ( ((a)>>20) & 0x3ff )
|
|
#define UNPACKDWORD_TRI_B(a) ( ((a)>>10) & 0x3ff )
|
|
#define UNPACKDWORD_TRI_C(a) ( (a) & 0x3ff)
|
|
|
|
// 4 8 bit values packed into a DWORD.
|
|
#define PACKDWORD_QUAD(a,b,c,d) ( (((a) & 0xff) << 24) | (((b) & 0xff) << 16) | (((c) & 0xff) << 8) | ((d) & 0xff) )
|
|
#define UNPACKDWORD_QUAD_A(a) ( ((a)>>24) & 0xff )
|
|
#define UNPACKDWORD_QUAD_B(a) ( ((a)>>16) & 0xff )
|
|
#define UNPACKDWORD_QUAD_C(a) ( ((a)>>8) & 0xff )
|
|
#define UNPACKDWORD_QUAD_D(a) ( (a) & 0xff)
|
|
|
|
|
|
//#define BUILDPOINTS_STRUCTDIV 1
|
|
//#define BUILDPOINTS_DROIDDIV 5
|
|
//#define POWERPOINTS_STRUCTDIV 1
|
|
#define POWERPOINTS_DROIDDIV 5 //3
|
|
|
|
#define OBJ_BUTWIDTH 60 // Button width.
|
|
#define OBJ_BUTHEIGHT 46 // Button height.
|
|
|
|
#define OBJ_TEXTX 2
|
|
|
|
#define OBJ_T1TEXTY 2
|
|
#define OBJ_T2TEXTY 14
|
|
#define OBJ_T3TEXTY 26
|
|
#define OBJ_B1TEXTY 8
|
|
|
|
#define STAT_SLD_OX (0) // Stat window slider offset.
|
|
#define STAT_SLD_OY (0)
|
|
#define STAT_SLDSTOPS 10 // Slider number of stops.
|
|
|
|
#define STAT_PROGBARX 3
|
|
#define STAT_PROGBARY 36
|
|
#define STAT_PROGBARWIDTH (OBJ_BUTWIDTH-8)
|
|
#define STAT_PROGBARHEIGHT 4
|
|
#define STAT_TIMEBARX 3
|
|
#define STAT_TIMEBARY (OBJ_BUTHEIGHT-STAT_PROGBARHEIGHT-3)
|
|
#define STAT_POWERBARX 3
|
|
#define STAT_POWERBARY (OBJ_BUTHEIGHT-STAT_PROGBARHEIGHT-6)
|
|
|
|
#define STAT_PROGBARMAJORRED 255//0xcc
|
|
#define STAT_PROGBARMAJORGREEN 235//0
|
|
#define STAT_PROGBARMAJORBLUE 19//0
|
|
#define STAT_PROGBARMINORRED 0x55
|
|
#define STAT_PROGBARMINORGREEN 0
|
|
#define STAT_PROGBARMINORBLUE 0
|
|
#define STAT_PROGBARTROUGHRED 0
|
|
#define STAT_PROGBARTROUGHGREEN 32
|
|
#define STAT_PROGBARTROUGHBLUE 64
|
|
#define STAT_TEXTRED 255
|
|
#define STAT_TEXTGREEN 255
|
|
#define STAT_TEXTBLUE 0
|
|
|
|
/* maximum array sizes */
|
|
#define MAXSTRUCTURES 200 //bumped up from 80. NOTE: was used for max # in build menus.
|
|
#define MAXRESEARCH 200 //was 80 topic displayed " "
|
|
#define MAXTEMPLATES 80 //was 20
|
|
#define MAXFEATURES 80
|
|
#define MAXCOMPONENT 80
|
|
#define MAXEXTRASYS 80
|
|
|
|
typedef enum {
|
|
INT_NORMAL, // Standard mode (just the reticule)
|
|
|
|
INT_OPTION, // Option screen
|
|
INT_EDIT, // Edit mode
|
|
|
|
INT_EDITSTAT, // Stat screen up for placing objects
|
|
INT_OBJECT, // Object screen
|
|
INT_STAT, // Object screen with stat screen
|
|
INT_CMDORDER, // Object screen with command droids and orders screen
|
|
INT_DESIGN, // Design screen
|
|
INT_INTELMAP, // Intelligence Map
|
|
INT_ORDER,
|
|
INT_INGAMEOP, // in game options.
|
|
//INT_TUTORIAL, // Tutorial mode - message display
|
|
INT_TRANSPORTER, //Loading/unloading a Transporter
|
|
INT_MISSIONRES, // Results of a mission display.
|
|
INT_MULTIMENU, // multiplayer only, player stats etc...
|
|
INT_CDCHANGE, // CD Change message box
|
|
|
|
INT_MAXMODE, //leave as last so we can start the objMode at this value
|
|
} INTMODE;
|
|
|
|
//NOT ANYMORE! 10/08/98 AB
|
|
//#define INCLUDE_PRODSLIDER // Include quantity slider in manufacture window.
|
|
|
|
#define INCLUDE_FACTORYLISTS
|
|
|
|
extern INTMODE intMode;
|
|
|
|
/* The widget screen */
|
|
extern W_SCREEN *psWScreen;
|
|
|
|
// The last widget ID from widgRunScreen
|
|
extern UDWORD intLastWidget;
|
|
|
|
/* The button ID of the objects stat when the stat screen is displayed */
|
|
extern UDWORD objStatID;
|
|
|
|
/* The current template for the design screen to start with*/
|
|
extern DROID_TEMPLATE *psCurrTemplate;
|
|
extern DROID_TEMPLATE **apsTemplateList;
|
|
|
|
//two colours used for drawing the footprint outline for objects in 2D
|
|
extern PIELIGHT outlineOK;
|
|
extern PIELIGHT outlineNotOK;
|
|
|
|
//value gets set to colour used for drawing
|
|
extern BOOL outlineTile;
|
|
|
|
/*Message View Buffer width and height - MAXIMUM Sizes! - only need to be
|
|
as big as Pie View in Research Msg now*/
|
|
#define MSG_BUFFER_WIDTH INTMAP_PIEWIDTH//DISP_WIDTH//640
|
|
#define MSG_BUFFER_HEIGHT INTMAP_PIEHEIGHT//DISP_HEIGHT//480
|
|
|
|
/* pointer to hold the imd to use for a new template in the design screen */
|
|
extern iIMDShape *pNewDesignIMD;
|
|
|
|
extern BOOL ClosingMessageView;
|
|
extern BOOL ClosingIntelMap;
|
|
extern BOOL ClosingTrans;
|
|
extern BOOL ClosingTransCont;
|
|
extern BOOL ClosingTransDroids;
|
|
|
|
/* Initialise the in game interface */
|
|
extern BOOL intInitialise(void);
|
|
|
|
/* Shut down the in game interface */
|
|
extern void intShutDown(void);
|
|
|
|
/* Return codes for the widget interface */
|
|
typedef enum _int_retval
|
|
{
|
|
INT_NONE, // no key clicks have been intercepted
|
|
INT_INTERCEPT, // key clicks have been intercepted
|
|
//INT_FULLSCREENPAUSE, // The widget interface is full screen and
|
|
// the rest of the game should pause
|
|
//INT_INTELPAUSE, // The Intelligence Map is up and all update
|
|
// routines should pause - hopefully!
|
|
INT_INTELNOSCROLL, //The 3DView of the intelligence screen is up
|
|
// and we don't want scroll (or update!)
|
|
INT_QUIT, // The game should quit
|
|
} INT_RETVAL;
|
|
|
|
/* Run the widgets for the in game interface */
|
|
extern INT_RETVAL intRunWidgets(void);
|
|
|
|
/* Display the widgets for the in game interface */
|
|
extern void intDisplayWidgets(void);
|
|
|
|
/* Add the reticule widgets to the widget screen */
|
|
extern BOOL intAddReticule(void);
|
|
extern void intRemoveReticule(void);
|
|
|
|
/* Set the map view point to the world coordinates x,y */
|
|
extern void intSetMapPos(UDWORD x, UDWORD y);
|
|
|
|
/* Set the map view point to the world coordinates x,y */
|
|
extern void intSetMapPos(UDWORD x, UDWORD y);
|
|
|
|
/* Tell the interface when an object is created
|
|
* - it may have to be added to a screen
|
|
*/
|
|
extern void intNewObj(BASE_OBJECT *psObj);
|
|
|
|
/* Tell the interface a construction droid has finished building */
|
|
extern void intBuildFinished(DROID *psDroid);
|
|
/* Tell the interface a construction droid has started building*/
|
|
extern void intBuildStarted(DROID *psDroid);
|
|
/* Tell the interface a research facility has completed a topic */
|
|
extern void intResearchFinished(STRUCTURE *psBuilding);
|
|
/* Tell the interface a factory has completed building ALL droids */
|
|
extern void intManufactureFinished(STRUCTURE *psBuilding);
|
|
|
|
/* Sync the interface to an object */
|
|
extern void intObjectSelected(BASE_OBJECT *psObj);
|
|
|
|
// add the construction interface if a constructor droid is selected
|
|
extern void intConstructorSelected(DROID *psDroid);
|
|
extern BOOL intBuildSelectMode(void);
|
|
extern BOOL intDemolishSelectMode(void);
|
|
extern BOOL intBuildMode(void);
|
|
|
|
// add the construction interface if a constructor droid is selected
|
|
void intCommanderSelected(DROID *psDroid);
|
|
|
|
extern UWORD numForms(UDWORD total, UDWORD perForm);
|
|
|
|
//sets up the Intelligence Screen as far as the interface is concerned
|
|
//extern void addIntelScreen(BOOL playImmediate);
|
|
extern void addIntelScreen(void);
|
|
|
|
// update shadow...
|
|
extern void intSetShadowPower(UDWORD quantity);
|
|
|
|
/* Reset the widget screen to just the reticule */
|
|
extern void intResetScreen(BOOL NoAnim);
|
|
|
|
/* Refresh icons on the interface, without disturbing the layout. i.e. smartreset*/
|
|
extern void intRefreshScreen(void);
|
|
|
|
/* Add the options widgets to the widget screen */
|
|
extern BOOL intAddOptions(void);
|
|
|
|
/* Remove the stats widgets from the widget screen */
|
|
extern void intRemoveStats(void);
|
|
|
|
/* Remove the stats widgets from the widget screen */
|
|
extern void intRemoveStatsNoAnim(void);
|
|
|
|
/*sets which list of structures to use for the interface*/
|
|
extern STRUCTURE* interfaceStructList(void);
|
|
|
|
//sets up the Transporter Screen as far as the interface is concerned
|
|
extern void addTransporterInterface(DROID *psSelected, BOOL onMission);
|
|
|
|
/*causes a reticule button to start flashing*/
|
|
extern void flashReticuleButton(UDWORD buttonID);
|
|
|
|
// stop a reticule button flashing
|
|
extern void stopReticuleButtonFlash(UDWORD buttonID);
|
|
|
|
//toggles the Power Bar display on and off
|
|
extern void togglePowerBar(void);
|
|
|
|
//displays the Power Bar
|
|
extern void intShowPowerBar(void);
|
|
|
|
//hides the power bar from the display
|
|
//extern void intHidePowerBar(void);
|
|
|
|
//hides the power bar from the display - regardless of what player requested!
|
|
extern void forceHidePowerBar(void);
|
|
|
|
/* Add the Proximity message buttons */
|
|
extern BOOL intAddProximityButton(PROXIMITY_DISPLAY *psProxDisp, UDWORD inc);
|
|
|
|
/*Remove a Proximity Button - when the message is deleted*/
|
|
extern void intRemoveProximityButton(PROXIMITY_DISPLAY *psProxDisp);
|
|
|
|
/* Allows us to fool the widgets with a keypress */
|
|
void setKeyButtonMapping( UDWORD val );
|
|
|
|
|
|
|
|
STRUCTURE *intFindAStructure(void);
|
|
STRUCTURE* intGotoNextStructureType(UDWORD structType,BOOL JumpTo,BOOL CancelDrive);
|
|
DROID *intGotoNextDroidType(DROID *CurrDroid,UDWORD droidType,BOOL AllowGroup);
|
|
|
|
/*Checks to see if there are any research topics to do and flashes the button*/
|
|
extern void intCheckResearchButton(void);
|
|
|
|
// see if a reticule button is enabled
|
|
extern BOOL intCheckReticuleButEnabled(UDWORD id);
|
|
|
|
//access function for selected object in the interface
|
|
extern BASE_OBJECT * getCurrentSelected(void);
|
|
|
|
//initialise all the previous obj - particularly useful for when go Off world!
|
|
extern void intResetPreviousObj(void);
|
|
|
|
extern void HandleClosingWindows(void);
|
|
|
|
extern BOOL intIsRefreshing(void);
|
|
|
|
void intReopenBuild(BOOL reopen);
|
|
BOOL intGetReopenBuild(void);
|
|
|
|
extern void intDemolishCancel(void);
|
|
|
|
#endif // __INCLUDED_SRC_HCI_H__
|