diff options
Diffstat (limited to 'src/uqm/sis.h')
-rw-r--r-- | src/uqm/sis.h | 241 |
1 files changed, 241 insertions, 0 deletions
diff --git a/src/uqm/sis.h b/src/uqm/sis.h new file mode 100644 index 0000000..ee07a81 --- /dev/null +++ b/src/uqm/sis.h @@ -0,0 +1,241 @@ +/* + * This program 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. + * + * This program 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 this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef SIS_H_INCL__ +#define SIS_H_INCL__ + +#include "libs/compiler.h" +#include "libs/gfxlib.h" +#include "planets/elemdata.h" + // for NUM_ELEMENT_CATEGORIES + +#if defined(__cplusplus) +extern "C" { +#endif + +#define CLEAR_SIS_RADAR (1 << 2) +#define DRAW_SIS_DISPLAY (1 << 3) + +#define UNDEFINED_DELTA 0x7FFF + +#define NUM_DRIVE_SLOTS 11 +#define NUM_JET_SLOTS 8 +#define NUM_MODULE_SLOTS 16 + +#define CREW_POD_CAPACITY 50 +#define STORAGE_BAY_CAPACITY 500 /* km cubed */ +#define FUEL_TANK_SCALE 100 +#define FUEL_TANK_CAPACITY (50 * FUEL_TANK_SCALE) +#define HEFUEL_TANK_CAPACITY (100 * FUEL_TANK_SCALE) +#define MODULE_COST_SCALE 50 + +#define CREW_EXPENSE_THRESHOLD 1000 + +#define CREW_PER_ROW 5 +#define SBAY_MASS_PER_ROW 50 + +#define MAX_FUEL_BARS 10 +#define FUEL_VOLUME_PER_ROW (HEFUEL_TANK_CAPACITY / MAX_FUEL_BARS) +#define FUEL_RESERVE FUEL_VOLUME_PER_ROW + +#define IP_SHIP_THRUST_INCREMENT 8 +#define IP_SHIP_TURN_WAIT 17 +#define IP_SHIP_TURN_DECREMENT 2 + +#define BIO_CREDIT_VALUE 2 + +enum +{ + PLANET_LANDER = 0, + /* thruster types */ + FUSION_THRUSTER, + /* jet types */ + TURNING_JETS, + /* module types */ + CREW_POD, + STORAGE_BAY, + FUEL_TANK, + HIGHEFF_FUELSYS, + DYNAMO_UNIT, + SHIVA_FURNACE, + GUN_WEAPON, + BLASTER_WEAPON, + CANNON_WEAPON, + TRACKING_SYSTEM, + ANTIMISSILE_DEFENSE, + + NUM_PURCHASE_MODULES, + + BOMB_MODULE_0 = NUM_PURCHASE_MODULES, + BOMB_MODULE_1, + BOMB_MODULE_2, + BOMB_MODULE_3, + BOMB_MODULE_4, + BOMB_MODULE_5, + + NUM_MODULES /* must be last entry */ +}; + +#define EMPTY_SLOT NUM_MODULES +#define NUM_BOMB_MODULES 10 + +#define DRIVE_SIDE_X 31 +#define DRIVE_SIDE_Y 56 +#define DRIVE_TOP_X 33 +#define DRIVE_TOP_Y (65 + 21) + +#define JET_SIDE_X 71 +#define JET_SIDE_Y 48 +#define JET_TOP_X 70 +#define JET_TOP_Y (73 + 21) + +#define MODULE_SIDE_X 17 +#define MODULE_SIDE_Y 14 +#define MODULE_TOP_X 17 +#define MODULE_TOP_Y (96 + 21) + +#define SHIP_PIECE_OFFSET 12 + +#define MAX_BUILT_SHIPS 12 + /* Maximum number of ships escorting the SIS */ +#define MAX_LANDERS 10 + +#define SUPPORT_SHIP_PTS \ + {3 + 0, 30 + (2 * 16)}, \ + {3 + 42, 30 + (2 * 16)}, \ + {3 + 0, 30 + (3 * 16)}, \ + {3 + 42, 30 + (3 * 16)}, \ + {3 + 0, 30 + (1 * 16)}, \ + {3 + 42, 30 + (1 * 16)}, \ + {3 + 0, 30 + (4 * 16)}, \ + {3 + 42, 30 + (4 * 16)}, \ + {3 + 0, 30 + (0 * 16)}, \ + {3 + 42, 30 + (0 * 16)}, \ + {3 + 0, 30 + (5 * 16)}, \ + {3 + 42, 30 + (5 * 16)}, + +#define SIS_NAME_SIZE 16 + +typedef struct +{ + SDWORD log_x, log_y; + + DWORD ResUnits; + + DWORD FuelOnBoard; + COUNT CrewEnlisted; + // Number of crew on board, not counting the captain. + // Set to (COUNT) ~0 to indicate game over. + COUNT TotalElementMass, TotalBioMass; + + BYTE ModuleSlots[NUM_MODULE_SLOTS]; + BYTE DriveSlots[NUM_DRIVE_SLOTS]; + BYTE JetSlots[NUM_JET_SLOTS]; + + BYTE NumLanders; + + COUNT ElementAmounts[NUM_ELEMENT_CATEGORIES]; + + UNICODE ShipName[SIS_NAME_SIZE]; + UNICODE CommanderName[SIS_NAME_SIZE]; + UNICODE PlanetName[SIS_NAME_SIZE]; +} SIS_STATE; + +#define OVERRIDE_LANDER_FLAGS (1 << 7) +#define AFTER_BOMB_INSTALLED (1 << 7) + +extern void RepairSISBorder (void); +extern void InitSISContexts (void); +extern void DrawSISFrame (void); +extern void ClearSISRect (BYTE ClearFlags); +extern void SetFlashRect (const RECT *pRect); +extern void PreUpdateFlashRect (void); +extern void PostUpdateFlashRect (void); +extern void PauseFlash (void); +extern void ContinueFlash (void); + +#define SFR_MENU_3DO ((RECT*)~0L) +#define SFR_MENU_ANY ((RECT*)~1L) +extern void DrawHyperCoords (POINT puniverse); +extern void DrawSISTitle (UNICODE *pStr); + +// Flags for DrawSISMessageEx (may be OR'ed): +#define DSME_NONE 0 +#define DSME_SETFR (1 << 0) + // Set the flash rectangle to the message area. +#define DSME_CLEARFR (1 << 1) + // Disable the flash rectangle. +#define DSME_BLOCKCUR (1 << 2) + // Use a block cursor instead of an insertion point cursor, + // when editing in the message field. +#define DSME_MYCOLOR (1 << 3) + // Use the current foreground color, instead of the default. +extern BOOLEAN DrawSISMessageEx (const UNICODE *pStr, SIZE CurPos, + SIZE ExPos, COUNT flags); + +extern void DrawSISMessage (const UNICODE *pStr); +extern void DateToString (char *buf, size_t bufLen, + BYTE month_index, BYTE day_index, COUNT year_index); + +// Returned RECT is relative to the StatusContext +extern void GetStatusMessageRect (RECT *r); +extern void DrawStatusMessage (const UNICODE *pStr); +typedef enum +{ + SMM_UNDEFINED = 0, + SMM_DATE, + SMM_RES_UNITS, + SMM_CREDITS, + + SMM_DEFAULT = SMM_DATE, +} StatMsgMode; +// Sets the new mode and return the previous +extern StatMsgMode SetStatusMessageMode (StatMsgMode); + +extern void DrawLanders (void); +extern void DrawStorageBays (BOOLEAN Refresh); +extern void GetGaugeRect (RECT *pRect, BOOLEAN IsCrewRect); +extern void DrawFlagshipStats (void); +void DrawAutoPilotMessage (BOOLEAN Reset); + +extern void DeltaSISGauges (SIZE crew_delta, SIZE fuel_delta, int + resunit_delta); + +extern COUNT GetCrewCount (void); +extern COUNT GetModuleCrewCapacity (BYTE moduleType); + +extern COUNT GetCrewPodCapacity (void); +extern COUNT GetCPodCapacity (POINT *ppt); + +extern COUNT GetModuleStorageCapacity (BYTE moduleType); +extern COUNT GetStorageBayCapacity (void); +extern COUNT GetSBayCapacity (POINT *ppt); + +extern DWORD GetModuleFuelCapacity (BYTE moduleType); +extern DWORD GetFuelTankCapacity (void); +extern DWORD GetFTankCapacity (POINT *ppt); + +extern COUNT CountSISPieces (BYTE piece_type); + +extern void DrawFlagshipName (BOOLEAN InStatusArea); +extern void DrawCaptainsName (void); + +#if defined(__cplusplus) +} +#endif + +#endif /* SIS_H_INCL__ */ + |