diff options
Diffstat (limited to 'src/uqm/races.h')
-rw-r--r-- | src/uqm/races.h | 675 |
1 files changed, 675 insertions, 0 deletions
diff --git a/src/uqm/races.h b/src/uqm/races.h new file mode 100644 index 0000000..b1a1617 --- /dev/null +++ b/src/uqm/races.h @@ -0,0 +1,675 @@ +//Copyright Paul Reiche, Fred Ford. 1992-2002 + +/* + * 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 UQM_RACES_H_ +#define UQM_RACES_H_ + +#include "types.h" +#include "libs/compiler.h" +#include "units.h" +#include "displist.h" + +typedef struct STARSHIP STARSHIP; +typedef HLINK HSTARSHIP; + +#include "element.h" +#include "libs/sndlib.h" +#include "libs/reslib.h" + +#if defined(__cplusplus) +extern "C" { +#endif + + +// TODO: remove RACES_PER_PLAYER remnant of SC1 +#define RACES_PER_PLAYER 7 +#define MAX_SHIPS_PER_SIDE 14 + +/* SHIP_INFO.ship_flags - ship specific flags */ +/* bits 0 and 1 are now available */ +#define SEEKING_WEAPON (1 << 2) +#define SEEKING_SPECIAL (1 << 3) +#define POINT_DEFENSE (1 << 4) + /* Ship has some point-defense capabilities */ +#define IMMEDIATE_WEAPON (1 << 5) +#define CREW_IMMUNE (1 << 6) +#define FIRES_FORE (1 << 7) +#define FIRES_RIGHT (1 << 8) +#define FIRES_AFT (1 << 9) +#define FIRES_LEFT (1 << 10) +#define SHIELD_DEFENSE (1 << 11) +#define DONT_CHASE (1 << 12) +#define PLAYER_CAPTAIN (1 << 13) + /* The protagonist himself is on board. He gets a different color. */ + +typedef UWORD STATUS_FLAGS; + +/* STATUS_FLAGS - heat of battle specific flags */ +#define LEFT (1 << 0) +#define RIGHT (1 << 1) +#define THRUST (1 << 2) +#define WEAPON (1 << 3) +#define SPECIAL (1 << 4) +#define LOW_ON_ENERGY (1 << 5) +#define SHIP_BEYOND_MAX_SPEED (1 << 6) +#define SHIP_AT_MAX_SPEED (1 << 7) +#define SHIP_IN_GRAVITY_WELL (1 << 8) +#define PLAY_VICTORY_DITTY (1 << 9) + +/* These track the old resource package orderings for the ship resource indices */ +typedef enum +{ + NO_ID, + ARILOU_ID, + CHMMR_ID, + EARTHLING_ID, + ORZ_ID, + PKUNK_ID, + SHOFIXTI_ID, + SPATHI_ID, + SUPOX_ID, + THRADDASH_ID, + UTWIG_ID, + VUX_ID, + YEHAT_ID, + MELNORME_ID, + DRUUGE_ID, + ILWRATH_ID, + MYCON_ID, + SLYLANDRO_ID, + UMGAH_ID, + UR_QUAN_ID, + ZOQFOTPIK_ID, + SYREEN_ID, + KOHR_AH_ID, + ANDROSYNTH_ID, + CHENJESU_ID, + MMRNMHRM_ID, + LAST_MELEE_ID = MMRNMHRM_ID, + SIS_SHIP_ID, + SA_MATRA_ID, + UR_QUAN_PROBE_ID, + NUM_SPECIES_ID +} SPECIES_ID; + +typedef struct captain_stuff +{ + RESOURCE captain_rsc; + FRAME background; + FRAME turn; + FRAME thrust; + FRAME weapon; + FRAME special; +} CAPTAIN_STUFF; + +typedef enum +{ + PURSUE = 0, + AVOID, + ENTICE, + NO_MOVEMENT +} MOVEMENT_STATE; + +typedef struct +{ + ELEMENT *ObjectPtr; + COUNT facing; + COUNT which_turn; + MOVEMENT_STATE MoveState; +} EVALUATE_DESC; + +typedef void (IntelligenceFunc) (ELEMENT *ShipPtr, + EVALUATE_DESC *ObjectsOfConcern, COUNT ConcernCounter); +typedef struct +{ + COUNT ManeuverabilityIndex; + COUNT WeaponRange; + IntelligenceFunc *intelligence_func; +} INTEL_STUFF; + +typedef struct +{ + COUNT max_thrust; + COUNT thrust_increment; + BYTE energy_regeneration; + BYTE weapon_energy_cost; + BYTE special_energy_cost; + BYTE energy_wait; + BYTE turn_wait; + BYTE thrust_wait; + BYTE weapon_wait; + BYTE special_wait; + BYTE ship_mass; +} CHARACTERISTIC_STUFF; + +typedef struct +{ + UWORD ship_flags; + BYTE ship_cost; + + COUNT crew_level; + COUNT max_crew; + BYTE energy_level; + BYTE max_energy; + + RESOURCE race_strings_rsc; + RESOURCE icons_rsc; + RESOURCE melee_icon_rsc; + + STRING race_strings; + FRAME icons; + FRAME melee_icon; +} SHIP_INFO; + +typedef struct +{ + COUNT strength; + POINT known_loc; + +#define INFINITE_RADIUS ((COUNT) ~0) +} FLEET_STUFF; + +typedef struct +{ + RESOURCE ship_rsc[NUM_VIEWS]; + RESOURCE weapon_rsc[NUM_VIEWS]; + RESOURCE special_rsc[NUM_VIEWS]; + CAPTAIN_STUFF captain_control; + RESOURCE victory_ditty_rsc; + RESOURCE ship_sounds_rsc; + + FRAME ship[NUM_VIEWS]; + FRAME weapon[NUM_VIEWS]; + FRAME special[NUM_VIEWS]; + MUSIC_REF victory_ditty; + SOUND ship_sounds; +} DATA_STUFF; + + +typedef struct race_desc RACE_DESC; + +typedef void (PREPROCESS_FUNC) (ELEMENT *ElementPtr); +typedef void (POSTPROCESS_FUNC) (ELEMENT *ElementPtr); +typedef COUNT (INIT_WEAPON_FUNC) (ELEMENT *ElementPtr, HELEMENT Weapon[]); +typedef void (UNINIT_FUNC) (RACE_DESC *pRaceDesc); + +struct race_desc +{ + SHIP_INFO ship_info _ALIGNED_ANY; + FLEET_STUFF fleet _ALIGNED_ANY; + CHARACTERISTIC_STUFF characteristics _ALIGNED_ANY; + DATA_STUFF ship_data _ALIGNED_ANY; + INTEL_STUFF cyborg_control _ALIGNED_ANY; + + UNINIT_FUNC *uninit_func; + PREPROCESS_FUNC *preprocess_func; + POSTPROCESS_FUNC *postprocess_func; + INIT_WEAPON_FUNC *init_weapon_func; + + void* data; // private ship data, ship code owns this + + void *CodeRef; +}; + +#define SHIP_BASE_COMMON \ + /* LINK elements; must be first */ \ + HLINK pred; \ + HLINK succ; \ + \ + SPECIES_ID SpeciesID; \ + BYTE captains_name_index \ + /* Also used in full-game to detect if a STARSHIP is an escort + * or the flagship (captains_name_index == 0) */ + +typedef struct +{ + SHIP_BASE_COMMON; +} SHIP_BASE; + + +struct STARSHIP +{ + SHIP_BASE_COMMON; + + RACE_DESC *RaceDescPtr; + + // Ship information + COUNT crew_level; + // In full-game battles: crew left + // In SuperMelee: irrelevant + COUNT max_crew; + BYTE ship_cost; + // In Super Melee ship queue: ship cost + // In full-game: irrelevant + COUNT index; + // original queue index + STRING race_strings; + FRAME icons; + + // Battle states + BYTE weapon_counter; + // In battle: frames left before primary weapon can be used + BYTE special_counter; + // In battle: frames left before special can be used + BYTE energy_counter; + // In battle: frames left before energy regeneration + + BYTE ship_input_state; + STATUS_FLAGS cur_status_flags; + STATUS_FLAGS old_status_flags; + + HELEMENT hShip; + COUNT ShipFacing; + + SIZE playerNr; + // 0: bottom player; In full-game: the human player (RPG) + // 1: top player; In full-game: the NPC opponent + // -1: neutral; this should currently never happen (asserts) + BYTE control; + // HUMAN, COMPUTER or NETWORK control flags, see intel.h +}; + +#define RPG_PLAYER_NUM 0 +#define NPC_PLAYER_NUM 1 + +static inline STARSHIP * +LockStarShip (const QUEUE *pq, HSTARSHIP h) +{ + assert (GetLinkSize (pq) == sizeof (STARSHIP)); + return (STARSHIP *) LockLink (pq, h); +} + +#define UnlockStarShip(pq, h) UnlockLink (pq, h) +#define FreeStarShip(pq, h) FreeLink (pq, h) + + +typedef HLINK HSHIPFRAG; + +typedef struct +{ + SHIP_BASE_COMMON; + + BYTE race_id; + BYTE index; + COUNT crew_level; + /* For ships in npc_built_ship_q, the value INFINITE_FLEET for + * crew_level indicates an infinite number of ships. */ + COUNT max_crew; + + BYTE energy_level; + BYTE max_energy; + // XXX: energy_level and max_energy are unused. We save and load + // them, but otherwise nothing needs them atm. + + STRING race_strings; + FRAME icons; + FRAME melee_icon; /* Only used by Shipyard */ + +#define INFINITE_FLEET ((COUNT) ~0) +} SHIP_FRAGMENT; + +static inline SHIP_FRAGMENT * +LockShipFrag (const QUEUE *pq, HSHIPFRAG h) +{ + assert (GetLinkSize (pq) == sizeof (SHIP_FRAGMENT)); + return (SHIP_FRAGMENT *) LockLink (pq, h); +} + +#define UnlockShipFrag(pq, h) UnlockLink (pq, h) +#define FreeShipFrag(pq, h) FreeLink (pq, h) + + +typedef HLINK HFLEETINFO; + +typedef struct +{ + // LINK elements; must be first + HFLEETINFO pred; + HFLEETINFO succ; + + SPECIES_ID SpeciesID; + + UWORD allied_state; /* GOOD_GUY, BAD_GUY or DEAD_GUY */ + BYTE days_left; /* Days left before the fleet reachers 'dest_loc'. */ + BYTE growth_fract; + COUNT crew_level; + COUNT max_crew; + BYTE growth; + BYTE max_energy; + POINT loc; /* Location of the fleet (center) */ + + STRING race_strings; + /* Race specific strings, see doc/devel/racestrings. */ + FRAME icons; + FRAME melee_icon; + + COUNT actual_strength; + /* Measure for the size of the sphere of influence. + * 0 if there is none and no ships will be generated. + * '(COUNT) ~0' if there is none, and the ship generation + * is handled separately. */ + COUNT known_strength; + /* Measure for the size of the sphere of influence when last + * checked the starmap. + * 0 if the race's SoI is not known. */ + POINT known_loc; + /* Location of the SoI (center) when last checked + * the starmap. */ + + BYTE growth_err_term; + BYTE func_index; + /* Function index defined in clock.h (the same as in SetEvent()) + * for the function to call when the fleet reaches 'dest_loc'. + * '(BYTE) ~0' means no function to call. */ + POINT dest_loc; + /* Location to which the fleet (center) is moving. */ + +} FLEET_INFO; + +// Values for FLEET_INFO.allied_state +enum +{ + DEAD_GUY = 0, // Race is extinct + GOOD_GUY, // Race is allied with the player + BAD_GUY, // Race is not allied with the player +}; + +static inline FLEET_INFO * +LockFleetInfo (const QUEUE *pq, HFLEETINFO h) +{ + assert (GetLinkSize (pq) == sizeof (FLEET_INFO)); + return (FLEET_INFO *) LockLink (pq, h); +} + +#define UnlockFleetInfo(pq, h) UnlockLink (pq, h) + +enum +{ + ARILOU_SHIP, + CHMMR_SHIP, + HUMAN_SHIP, + ORZ_SHIP, + PKUNK_SHIP, + SHOFIXTI_SHIP, + SPATHI_SHIP, + SUPOX_SHIP, + THRADDASH_SHIP, + UTWIG_SHIP, + VUX_SHIP, + YEHAT_SHIP, + MELNORME_SHIP, + DRUUGE_SHIP, + ILWRATH_SHIP, + MYCON_SHIP, + SLYLANDRO_SHIP, + UMGAH_SHIP, + URQUAN_SHIP, + ZOQFOTPIK_SHIP, + + SYREEN_SHIP, + BLACK_URQUAN_SHIP, + YEHAT_REBEL_SHIP, + URQUAN_DRONE_SHIP, + SAMATRA_SHIP = URQUAN_DRONE_SHIP, + + NUM_AVAILABLE_RACES +}; + +#define RACE_COMMUNICATION \ + ARILOU_CONVERSATION, /* ARILOU_SHIP */ \ + CHMMR_CONVERSATION, /* CHMMR_SHIP */ \ + INVALID_CONVERSATION, /* HUMAN_SHIP */ \ + ORZ_CONVERSATION, /* ORZ_SHIP */ \ + PKUNK_CONVERSATION, /* PKUNK_SHIP */ \ + SHOFIXTI_CONVERSATION, /* SHOFIXTI_SHIP */ \ + SPATHI_CONVERSATION, /* SPATHI_SHIP */ \ + SUPOX_CONVERSATION, /* SUPOX_SHIP */ \ + THRADD_CONVERSATION, /* THRADDASH_SHIP */ \ + UTWIG_CONVERSATION, /* UTWIG_SHIP */ \ + VUX_CONVERSATION, /* VUX_SHIP */ \ + YEHAT_CONVERSATION, /* YEHAT_SHIP */ \ + MELNORME_CONVERSATION, /* MELNORME_SHIP */ \ + DRUUGE_CONVERSATION, /* DRUUGE_SHIP */ \ + ILWRATH_CONVERSATION, /* ILWRATH_SHIP */ \ + MYCON_CONVERSATION, /* MYCON_SHIP */ \ + SLYLANDRO_CONVERSATION, /* SLYLANDRO_SHIP */ \ + UMGAH_CONVERSATION, /* UMGAH_SHIP */ \ + URQUAN_CONVERSATION, /* URQUAN_SHIP */ \ + ZOQFOTPIK_CONVERSATION, /* ZOQFOTPIK_SHIP */ \ + INVALID_CONVERSATION, /* SYREEN_SHIP */ \ + BLACKURQ_CONVERSATION, /* BLACK_URQUAN_SHIP */ \ + YEHAT_REBEL_CONVERSATION, /* YEHAT_REBEL_SHIP */ \ + URQUAN_DRONE_CONVERSATION, /* URQUAN_DRONE_SHIP */ + +#define RACE_SHIP_FOR_COMM \ + ARILOU_SHIP, /* ARILOU_CONVERSATION */ \ + CHMMR_SHIP, /* CHMMR_CONVERSATION */ \ + HUMAN_SHIP, /* COMMANDER_CONVERSATION */ \ + ORZ_SHIP, /* ORZ_CONVERSATION */ \ + PKUNK_SHIP, /* PKUNK_CONVERSATION */ \ + SHOFIXTI_SHIP, /* SHOFIXTI_CONVERSATION */ \ + SPATHI_SHIP, /* SPATHI_CONVERSATION */ \ + SUPOX_SHIP, /* SUPOX_CONVERSATION */ \ + THRADDASH_SHIP, /* THRADD_CONVERSATION */ \ + UTWIG_SHIP, /* UTWIG_CONVERSATION */ \ + VUX_SHIP, /* VUX_CONVERSATION */ \ + YEHAT_SHIP, /* YEHAT_CONVERSATION */ \ + MELNORME_SHIP, /* MELNORME_CONVERSATION */ \ + DRUUGE_SHIP, /* DRUUGE_CONVERSATION */ \ + ILWRATH_SHIP, /* ILWRATH_CONVERSATION */ \ + MYCON_SHIP, /* MYCON_CONVERSATION */ \ + SLYLANDRO_SHIP, /* SLYLANDRO_CONVERSATION */ \ + UMGAH_SHIP, /* UMGAH_CONVERSATION */ \ + URQUAN_SHIP, /* URQUAN_CONVERSATION */ \ + ZOQFOTPIK_SHIP, /* ZOQFOTPIK_CONVERSATION */ \ + SYREEN_SHIP, /* SYREEN_CONVERSATION */ \ + BLACK_URQUAN_SHIP, /* BLACKURQ_CONVERSATION */ \ + UMGAH_SHIP, /* TALKING_PET_CONVERSATION */ \ + SLYLANDRO_SHIP, /* SLYLANDRO_HOME_CONVERSATION */ \ + URQUAN_DRONE_SHIP, /* URQUAN_DRONE_CONVERSATION */ \ + YEHAT_SHIP, /* YEHAT_REBEL_CONVERSATION */ \ + HUMAN_SHIP /* INVALID_CONVERSATION */ + +#define RACE_SHIP_COST \ + 1600, /* ARILOU_SHIP */ \ + 3000, /* CHMMR_SHIP */ \ + 1100, /* HUMAN_SHIP */ \ + 2300, /* ORZ_SHIP */ \ + 2000, /* PKUNK_SHIP */ \ + 500, /* SHOFIXTI_SHIP */ \ + 1800, /* SPATHI_SHIP */ \ + 1600, /* SUPOX_SHIP */ \ + 1000, /* THRADDASH_SHIP */ \ + 2200, /* UTWIG_SHIP */ \ + 1200, /* VUX_SHIP */ \ + 2300, /* YEHAT_SHIP */ \ + 3600, /* MELNORME_SHIP */ \ + 1700, /* DRUUGE_SHIP */ \ + 1000, /* ILWRATH_SHIP */ \ + 2100, /* MYCON_SHIP */ \ + 4400, /* SLYLANDRO_SHIP */ \ + 700, /* UMGAH_SHIP */ \ + 3000, /* URQUAN_SHIP */ \ + 600, /* ZOQFOTPIK_SHIP */ \ + 1300, /* SYREEN_SHIP */ \ + 3000, /* BLACK_URQUAN_SHIP */ \ + 2300, /* YEHAT_REBEL_SHIP */ + +#define LOG_TO_IP(s) ((s) << 1) +#define RACE_IP_SPEED \ + LOG_TO_IP (40), /* ARILOU_SHIP */ \ + LOG_TO_IP (27), /* CHMMR_SHIP */ \ + LOG_TO_IP (24), /* HUMAN_SHIP */ \ + LOG_TO_IP (40), /* ORZ_SHIP */ \ + LOG_TO_IP (40), /* PKUNK_SHIP */ \ + LOG_TO_IP (35), /* SHOFIXTI_SHIP */ \ + LOG_TO_IP (48), /* SPATHI_SHIP */ \ + LOG_TO_IP (40), /* SUPOX_SHIP */ \ + LOG_TO_IP (28), /* THRADDASH_SHIP */ \ + LOG_TO_IP (30), /* UTWIG_SHIP */ \ + LOG_TO_IP (21), /* VUX_SHIP */ \ + LOG_TO_IP (30), /* YEHAT_SHIP */ \ + LOG_TO_IP (40), /* MELNORME_SHIP */ \ + LOG_TO_IP (20), /* DRUUGE_SHIP */ \ + LOG_TO_IP (25), /* ILWRATH_SHIP */ \ + LOG_TO_IP (27), /* MYCON_SHIP */ \ + LOG_TO_IP (60), /* SLYLANDRO_SHIP */ \ + LOG_TO_IP (18), /* UMGAH_SHIP */ \ + LOG_TO_IP (30), /* URQUAN_SHIP */ \ + LOG_TO_IP (40), /* ZOQFOTPIK_SHIP */ \ + LOG_TO_IP (36), /* SYREEN_SHIP */ \ + LOG_TO_IP (30), /* BLACK_URQUAN_SHIP */ \ + LOG_TO_IP (30), /* YEHAT_REBEL_SHIP */ \ + LOG_TO_IP (90), /* URQUAN_DRONE_SHIP */ + +#define LOG_TO_HYPER(s) (WORLD_TO_VELOCITY (s) >> 1) +#define RACE_HYPER_SPEED \ + LOG_TO_HYPER (40), /* ARILOU_SHIP */ \ + LOG_TO_HYPER (27), /* CHMMR_SHIP */ \ + LOG_TO_HYPER (24), /* HUMAN_SHIP */ \ + LOG_TO_HYPER (40), /* ORZ_SHIP */ \ + LOG_TO_HYPER (40), /* PKUNK_SHIP */ \ + LOG_TO_HYPER (35), /* SHOFIXTI_SHIP */ \ + LOG_TO_HYPER (48), /* SPATHI_SHIP */ \ + LOG_TO_HYPER (40), /* SUPOX_SHIP */ \ + LOG_TO_HYPER (50), /* THRADDASH_SHIP */ \ + LOG_TO_HYPER (30), /* UTWIG_SHIP */ \ + LOG_TO_HYPER (21), /* VUX_SHIP */ \ + LOG_TO_HYPER (30), /* YEHAT_SHIP */ \ + LOG_TO_HYPER (40), /* MELNORME_SHIP */ \ + LOG_TO_HYPER (20), /* DRUUGE_SHIP */ \ + LOG_TO_HYPER (25), /* ILWRATH_SHIP */ \ + LOG_TO_HYPER (27), /* MYCON_SHIP */ \ + LOG_TO_HYPER (60), /* SLYLANDRO_SHIP */ \ + LOG_TO_HYPER (18), /* UMGAH_SHIP */ \ + LOG_TO_HYPER (30), /* URQUAN_SHIP */ \ + LOG_TO_HYPER (40), /* ZOQFOTPIK_SHIP */ \ + LOG_TO_HYPER (36), /* SYREEN_SHIP */ \ + LOG_TO_HYPER (30), /* BLACK_URQUAN_SHIP */ \ + LOG_TO_HYPER (30), /* YEHAT_REBEL_SHIP */ + +#define RACE_HYPERSPACE_PERCENT \ + 20, /* ARILOU_SHIP */ \ + 0, /* CHMMR_SHIP */ \ + 0, /* HUMAN_SHIP */ \ + 20, /* ORZ_SHIP */ \ + 40, /* PKUNK_SHIP */ \ + 0, /* SHOFIXTI_SHIP */ \ + 20, /* SPATHI_SHIP */ \ + 40, /* SUPOX_SHIP */ \ + 60, /* THRADDASH_SHIP */ \ + 40, /* UTWIG_SHIP */ \ + 40, /* VUX_SHIP */ \ + 60, /* YEHAT_SHIP */ \ + 0, /* MELNORME_SHIP */ \ + 30, /* DRUUGE_SHIP */ \ + 60, /* ILWRATH_SHIP */ \ + 40, /* MYCON_SHIP */ \ + 2, /* SLYLANDRO_SHIP */ \ + 30, /* UMGAH_SHIP */ \ + 70, /* URQUAN_SHIP */ \ + 0, /* ZOQFOTPIK_SHIP */ \ + 0, /* SYREEN_SHIP */ \ + 70, /* BLACK_URQUAN_SHIP */ \ + 60, /* YEHAT_REBEL_SHIP */ \ + 0, /* URQUAN_DRONE_SHIP */ + +#define RACE_INTERPLANETARY_PERCENT \ + 0, /* ARILOU_SHIP */ \ + 0, /* CHMMR_SHIP */ \ + 0, /* HUMAN_SHIP */ \ + 20, /* ORZ_SHIP */ \ + 20, /* PKUNK_SHIP */ \ + 0, /* SHOFIXTI_SHIP */ \ + 10, /* SPATHI_SHIP */ \ + 20, /* SUPOX_SHIP */ \ + 20, /* THRADDASH_SHIP */ \ + 20, /* UTWIG_SHIP */ \ + 20, /* VUX_SHIP */ \ + 40, /* YEHAT_SHIP */ \ + 0, /* MELNORME_SHIP */ \ + 20, /* DRUUGE_SHIP */ \ + 60, /* ILWRATH_SHIP */ \ + 20, /* MYCON_SHIP */ \ + 5, /* SLYLANDRO_SHIP */ \ + 20, /* UMGAH_SHIP */ \ + 40, /* URQUAN_SHIP */ \ + 0, /* ZOQFOTPIK_SHIP */ \ + 0, /* SYREEN_SHIP */ \ + 40, /* BLACK_URQUAN_SHIP */ \ + 40, /* YEHAT_REBEL_SHIP */ \ + 0, /* URQUAN_DRONE_SHIP */ + +// How many ships will an encounter consist of. +// The first number specifies the minimum, the second the maximum. +// The chance is 50% for each ship past the minimum to be present. +#define RACE_ENCOUNTER_MAKEUP \ + MAKE_BYTE (1, 5), /* ARILOU_SHIP */ \ + 0, /* CHMMR_SHIP */ \ + 0, /* HUMAN_SHIP */ \ + MAKE_BYTE (1, 5), /* ORZ_SHIP */ \ + MAKE_BYTE (1, 5), /* PKUNK_SHIP */ \ + 0, /* SHOFIXTI_SHIP */ \ + MAKE_BYTE (1, 5), /* SPATHI_SHIP */ \ + MAKE_BYTE (1, 5), /* SUPOX_SHIP */ \ + MAKE_BYTE (1, 5), /* THRADDASH_SHIP */ \ + MAKE_BYTE (1, 5), /* UTWIG_SHIP */ \ + MAKE_BYTE (1, 5), /* VUX_SHIP */ \ + MAKE_BYTE (1, 5), /* YEHAT_SHIP */ \ + MAKE_BYTE (1, 1), /* MELNORME_SHIP */ \ + MAKE_BYTE (1, 5), /* DRUUGE_SHIP */ \ + MAKE_BYTE (1, 5), /* ILWRATH_SHIP */ \ + MAKE_BYTE (1, 5), /* MYCON_SHIP */ \ + MAKE_BYTE (1, 1), /* SLYLANDRO_SHIP */ \ + MAKE_BYTE (1, 5), /* UMGAH_SHIP */ \ + MAKE_BYTE (1, 5), /* URQUAN_SHIP */ \ + MAKE_BYTE (1, 5), /* ZOQFOTPIK_SHIP */ \ + 0, /* SYREEN_SHIP */ \ + MAKE_BYTE (1, 5), /* BLACK_URQUAN_SHIP */ \ + MAKE_BYTE (1, 5), /* YEHAT_REBEL_SHIP */ + +#define RACE_COLORS \ + BUILD_COLOR (MAKE_RGB15_INIT (0x00, 0x00, 0x10), 0x53), /* ARILOU_SHIP */ \ + BUILD_COLOR (MAKE_RGB15_INIT (0x00, 0x00, 0x00), 0x00), /* CHMMR_SHIP */ \ + BUILD_COLOR (MAKE_RGB15_INIT (0x00, 0x01, 0x1f), 0x4D), /* HUMAN_SHIP */ \ + BUILD_COLOR (MAKE_RGB15_INIT (0x0E, 0x00, 0x0E), 0x36), /* ORZ_SHIP */ \ + BUILD_COLOR (MAKE_RGB15_INIT (0x00, 0x06, 0x08), 0x62), /* PKUNK_SHIP */ \ + BUILD_COLOR (MAKE_RGB15_INIT (0x00, 0x00, 0x00), 0x00), /* SHOFIXTI_SHIP */ \ + BUILD_COLOR (MAKE_RGB15_INIT (0x0C, 0x05, 0x00), 0x76), /* SPATHI_SHIP */ \ + BUILD_COLOR (MAKE_RGB15_INIT (0x0C, 0x05, 0x00), 0x76), /* SUPOX_SHIP */ \ + BUILD_COLOR (MAKE_RGB15_INIT (0x00, 0x06, 0x08), 0x62), /* THRADDASH_SHIP */ \ + BUILD_COLOR (MAKE_RGB15_INIT (0x00, 0x06, 0x08), 0x62), /* UTWIG_SHIP */ \ + BUILD_COLOR (MAKE_RGB15_INIT (0x00, 0x00, 0x10), 0x53), /* VUX_SHIP */ \ + BUILD_COLOR (MAKE_RGB15_INIT (0x0A, 0x00, 0x11), 0x3D), /* YEHAT_SHIP */ \ + BUILD_COLOR (MAKE_RGB15_INIT (0x00, 0x06, 0x08), 0x62), /* MELNORME_SHIP */ \ + BUILD_COLOR (MAKE_RGB15_INIT (0x0F, 0x00, 0x00), 0x2D), /* DRUUGE_SHIP */ \ + BUILD_COLOR (MAKE_RGB15_INIT (0x0E, 0x00, 0x0E), 0x36), /* ILWRATH_SHIP */ \ + BUILD_COLOR (MAKE_RGB15_INIT (0x0E, 0x00, 0x0E), 0x36), /* MYCON_SHIP */ \ + BUILD_COLOR (MAKE_RGB15_INIT (0x0C, 0x05, 0x00), 0x76), /* SLYLANDRO_SHIP */ \ + BUILD_COLOR (MAKE_RGB15_INIT (0x0A, 0x00, 0x11), 0x3D), /* UMGAH_SHIP */ \ + BUILD_COLOR (MAKE_RGB15_INIT (0x00, 0x08, 0x00), 0x6E), /* URQUAN_SHIP */ \ + BUILD_COLOR (MAKE_RGB15_INIT (0x0F, 0x00, 0x00), 0x2D), /* ZOQFOTPIK_SHIP */ \ + BUILD_COLOR (MAKE_RGB15_INIT (0x00, 0x00, 0x00), 0x00), /* SYREEN_SHIP */ \ + BUILD_COLOR (MAKE_RGB15_INIT (0x06, 0x06, 0x06), 0x20), /* BLACK_URQUAN_SHIP */ \ + BUILD_COLOR (MAKE_RGB15_INIT (0x14, 0x07, 0x1F), 0x39), /* YEHAT_REBEL_SHIP */ + +#if defined(__cplusplus) +} +#endif + +#endif /* UQM_RACES_H_ */ |