summaryrefslogtreecommitdiff
path: root/src/uqm/planets/plandata.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/uqm/planets/plandata.h')
-rw-r--r--src/uqm/planets/plandata.h318
1 files changed, 318 insertions, 0 deletions
diff --git a/src/uqm/planets/plandata.h b/src/uqm/planets/plandata.h
new file mode 100644
index 0000000..cd2a1c7
--- /dev/null
+++ b/src/uqm/planets/plandata.h
@@ -0,0 +1,318 @@
+//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_PLANETS_PLANDATA_H_
+#define UQM_PLANETS_PLANDATA_H_
+
+#include "libs/reslib.h"
+
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
+/*------------------------------ Type Defines ----------------------------- */
+#define NUMBER_OF_ORBITS 16
+#define VACANT 0xFF
+
+enum
+{
+ SMALL_ROCKY_WORLD = 0,
+ LARGE_ROCKY_WORLD,
+ GAS_GIANT,
+
+ NUM_PLANET_TYPES
+};
+
+enum
+{
+ DWARF_STAR = 0,
+ GIANT_STAR,
+ SUPER_GIANT_STAR,
+
+ NUM_STAR_TYPES
+};
+
+enum
+{
+ BLUE_BODY = 0,
+ GREEN_BODY,
+ ORANGE_BODY,
+ RED_BODY,
+ WHITE_BODY,
+ GRAY_BODY = WHITE_BODY,
+ YELLOW_BODY,
+
+ NUM_STAR_COLORS,
+
+ CYAN_BODY = NUM_STAR_COLORS,
+ PURPLE_BODY,
+ VIOLET_BODY
+};
+
+enum
+{
+ OWNER_NOBODY = 0,
+ OWNER_NEUTRAL,
+ OWNER_HIERARCHY,
+
+ OWNER_PLAYER = (1 << 2)
+};
+
+#define STAR_OWNER_SHIFT 0
+#define STAR_TYPE_SHIFT 3 /* STAR_OWNER_SHIFT + 3 */
+#define STAR_COLOR_SHIFT 5 /* STAR_TYPE_SHIFT + 2 */
+#define STAR_COLOR_MASK (BYTE)(0xFF << STAR_COLOR_SHIFT)
+#define STAR_TYPE_MASK (BYTE)((0xFF << STAR_TYPE_SHIFT) \
+ & ~STAR_COLOR_MASK)
+#define STAR_OWNER_MASK (BYTE)((0xFF << STAR_OWNER_SHIFT) \
+ & ~(STAR_COLOR_MASK \
+ | STAR_TYPE_MASK))
+#define STAR_UNKNOWN_MASK (STAR_OWNER_MASK & ~OWNER_PLAYER)
+
+#define MAKE_STAR(t,c,o) \
+ (BYTE)((((BYTE)(t) << STAR_TYPE_SHIFT) & STAR_TYPE_MASK) \
+ | (((BYTE)(c) << STAR_COLOR_SHIFT) & STAR_COLOR_MASK) \
+ | (((BYTE)(o) << STAR_OWNER_SHIFT) & STAR_OWNER_MASK))
+#define STAR_TYPE(f) (BYTE)(((f) & STAR_TYPE_MASK) >> STAR_TYPE_SHIFT)
+#define STAR_COLOR(f) (BYTE)(((f) & STAR_COLOR_MASK) >> STAR_COLOR_SHIFT)
+#define STAR_OWNER(f) (BYTE)(((f) & STAR_OWNER_MASK) >> STAR_OWNER_SHIFT)
+#define STAR_UNKNOWN(f) (BOOLEAN)((STAR_OWNER(f) \
+ & STAR_UNKNOWN_MASK) == STAR_UNKNOWN_MASK)
+
+#define PLAN_SIZE_MASK 0x03
+
+#define TOPO_ALGO (0 << 2)
+#define CRATERED_ALGO (1 << 2)
+#define GAS_GIANT_ALGO (2 << 2)
+#define PLAN_ALGO_MASK 0x0C
+
+#define PLANSIZE(type) ((BYTE)((type) & PLAN_SIZE_MASK))
+#define PLANALGO(type) ((BYTE)((type) & PLAN_ALGO_MASK))
+#define PLANCOLOR(type) HINIBBLE (type)
+
+#define THIN_ATMOSPHERE 10
+#define NORMAL_ATMOSPHERE 75
+#define THICK_ATMOSPHERE 200
+#define SUPER_THICK_ATMOSPHERE 2500
+#define GAS_GIANT_ATMOSPHERE 0xFFFF
+
+enum
+{
+ FIRST_ROCKY_WORLD = 0,
+ FIRST_SMALL_ROCKY_WORLD = FIRST_ROCKY_WORLD,
+
+ OOLITE_WORLD = FIRST_SMALL_ROCKY_WORLD,
+ YTTRIC_WORLD,
+ QUASI_DEGENERATE_WORLD,
+ LANTHANIDE_WORLD,
+ TREASURE_WORLD,
+ UREA_WORLD,
+ METAL_WORLD,
+ RADIOACTIVE_WORLD,
+ OPALESCENT_WORLD,
+ CYANIC_WORLD,
+ ACID_WORLD,
+ ALKALI_WORLD,
+ HALIDE_WORLD,
+ GREEN_WORLD,
+ COPPER_WORLD,
+ CARBIDE_WORLD,
+ ULTRAMARINE_WORLD,
+ NOBLE_WORLD,
+ AZURE_WORLD,
+ CHONDRITE_WORLD,
+ PURPLE_WORLD,
+ SUPER_DENSE_WORLD,
+ PELLUCID_WORLD,
+ DUST_WORLD,
+ CRIMSON_WORLD,
+ CIMMERIAN_WORLD,
+ INFRARED_WORLD,
+ SELENIC_WORLD,
+ AURIC_WORLD,
+ LAST_SMALL_ROCKY_WORLD = AURIC_WORLD,
+
+ FIRST_LARGE_ROCKY_WORLD,
+ FLUORESCENT_WORLD = FIRST_LARGE_ROCKY_WORLD,
+ ULTRAVIOLET_WORLD,
+ PLUTONIC_WORLD,
+ RAINBOW_WORLD,
+ SHATTERED_WORLD,
+ SAPPHIRE_WORLD,
+ ORGANIC_WORLD,
+ XENOLITHIC_WORLD,
+ REDUX_WORLD,
+ PRIMORDIAL_WORLD,
+ EMERALD_WORLD,
+ CHLORINE_WORLD,
+ MAGNETIC_WORLD,
+ WATER_WORLD,
+ TELLURIC_WORLD,
+ HYDROCARBON_WORLD,
+ IODINE_WORLD,
+ VINYLOGOUS_WORLD,
+ RUBY_WORLD,
+ MAGMA_WORLD,
+ MAROON_WORLD,
+ LAST_LARGE_ROCKY_WORLD = MAROON_WORLD,
+
+ FIRST_GAS_GIANT,
+ BLU_GAS_GIANT = FIRST_GAS_GIANT, /* Gas Giants */
+ CYA_GAS_GIANT,
+ GRN_GAS_GIANT,
+ GRY_GAS_GIANT,
+ ORA_GAS_GIANT,
+ PUR_GAS_GIANT,
+ RED_GAS_GIANT,
+ VIO_GAS_GIANT,
+ YEL_GAS_GIANT,
+ LAST_GAS_GIANT = YEL_GAS_GIANT,
+
+ NUMBER_OF_PLANET_TYPES,
+
+ WORLD_TYPE_SPECIAL = 0x80,
+ PLANET_SHIELDED = WORLD_TYPE_SPECIAL,
+
+ HIERARCHY_STARBASE = 127 | WORLD_TYPE_SPECIAL,
+ SA_MATRA = 126 | WORLD_TYPE_SPECIAL,
+};
+
+#define NUMBER_OF_SMALL_ROCKY_WORLDS (LAST_SMALL_ROCKY_WORLD - FIRST_SMALL_ROCKY_WORLD + 1)
+#define NUMBER_OF_LARGE_ROCKY_WORLDS (LAST_LARGE_ROCKY_WORLD - FIRST_LARGE_ROCKY_WORLD + 1)
+#define NUMBER_OF_ROCKY_WORLDS (NUMBER_OF_SMALL_ROCKY_WORLDS + NUMBER_OF_LARGE_ROCKY_WORLDS)
+#define NUMBER_OF_GAS_GIANTS (LAST_GAS_GIANT - FIRST_GAS_GIANT + 1)
+
+// TODO: This struct is highly alignment and padding dependent and
+// should not be used! The data is loaded as binary from files and
+// cast to this struct.
+typedef struct
+{
+ const SIZE level_tab[3];
+ const BYTE xlat_tab[256];
+} XLAT_DESC;
+
+typedef struct
+{
+ BYTE ElementType;
+ /* Index of this element in element_array */
+ BYTE Density;
+ /* bits 0-3: quantity of the deposits (maximum number of
+ * deposits), one of FEW, MODERATE, or NUMEROUS
+ * bits 4-7: quality of the deposit, one of LOW, MEDIUM, or HEAVY
+ */
+} ELEMENT_ENTRY;
+
+// PlanetFrame describes a type of planet. It is not used to describe
+// individual planets.
+typedef struct
+{
+ BYTE Type;
+ /* bits 0-1: size, one of SMALL_ROCKY_WORLD, LARGE_ROCKY_WORLD, or
+ * GAS_GIANT
+ * bits 2-3: map creation algoritm, one of TOPO_ALGO,
+ * CRATERED_ALGO, or GAS_GIANT_ALGO
+ * bits 4-7: interplanetary color, one of BLUE_BODY, GREEN_BODY,
+ * ORANGE_BODY, RED_BODY, WHITE_BODY (same as
+ * GRAY_BODY), YELLOW_BODY, CYAN_BODY, PURPLE_BODY,
+ * VIOLET_BODY)
+ */
+ BYTE BaseTectonics;
+ /* Base constant for calculation of tectonic activity,
+ * relative to Earth at 100.
+ * One of: NO_TECTONICS, LOW_TECTONICS, MED_TECTONICS,
+ * HIGH_TECTONICS, or SUPER_TECTONICS
+ */
+ BYTE AtmoAndDensity;
+ /* bits 0-3: planet density, one of GAS_DENSITY, LIGHT_DENSITY,
+ * LOW_DENSITY, NORMAL_DENSITY, HIGH_DENSITY,
+ * SUPER_DENSITY
+ * bits 4-7: atmosphere, one of LIGHT, MEDIUM, HEAVY, or
+ * (no define for this) super thick.
+ */
+#define NUM_USEFUL_ELEMENTS 8
+ ELEMENT_ENTRY UsefulElements[NUM_USEFUL_ELEMENTS];
+ /* Minerals on the planet */
+
+ RESOURCE CMapInstance;
+ /* Color map */
+ RESOURCE XlatTabInstance;
+ /* Color translation map */
+
+ // Parameters for map-generation algoritms:
+ COUNT num_faults;
+ SIZE fault_depth;
+ COUNT num_blemishes;
+ SIZE base_elevation;
+} PlanetFrame;
+
+typedef struct
+{
+ SIZE AxialTilt;
+ UWORD Tectonics;
+ UWORD Weather;
+ UWORD PlanetDensity;
+ UWORD PlanetRadius;
+ UWORD SurfaceGravity;
+ SIZE SurfaceTemperature;
+ UWORD RotationPeriod;
+ UWORD AtmoDensity;
+ SIZE LifeChance;
+ UWORD PlanetToSunDist;
+
+ const PlanetFrame *PlanDataPtr;
+
+ DWORD ScanSeed[NUM_SCAN_TYPES];
+ DWORD ScanRetrieveMask[NUM_SCAN_TYPES];
+
+ STRING DiscoveryString;
+ FONT LanderFont;
+ FRAME LanderFontEff;
+} PLANET_INFO;
+
+enum
+{
+ GAS_DENSITY,
+ LIGHT_DENSITY,
+ LOW_DENSITY,
+ NORMAL_DENSITY,
+ HIGH_DENSITY,
+ SUPER_DENSITY
+};
+
+extern UWORD CalcGravity (const PLANET_INFO*);
+
+#define EARTH_ATMOSPHERE 50
+
+#define COLD_THRESHOLD -40
+#define HOT_THRESHOLD 100
+
+/*------------------------------ Global Data ------------------------------ */
+
+#define NO_TECTONICS 0
+#define LOW_TECTONICS 40
+#define MED_TECTONICS 80
+#define HIGH_TECTONICS 140
+#define SUPER_TECTONICS 200
+
+extern const PlanetFrame *PlanData;
+
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* UQM_PLANETS_PLANDATA_H_ */