summaryrefslogtreecommitdiff
path: root/src/uqm/globdata.h
diff options
context:
space:
mode:
authorneonloop2021-05-07 20:00:12 +0000
committerneonloop2021-05-07 20:00:12 +0000
commit7f6002caba3f0a6749820c2772161caf55b8d267 (patch)
tree1ed4bdd8c9ac897d1a3f77c223c1fd286dded458 /src/uqm/globdata.h
downloaduqm-7f6002caba3f0a6749820c2772161caf55b8d267.tar.gz
uqm-7f6002caba3f0a6749820c2772161caf55b8d267.tar.bz2
uqm-7f6002caba3f0a6749820c2772161caf55b8d267.zip
Initial commit (uqm-0.8.0)
Diffstat (limited to 'src/uqm/globdata.h')
-rw-r--r--src/uqm/globdata.h1059
1 files changed, 1059 insertions, 0 deletions
diff --git a/src/uqm/globdata.h b/src/uqm/globdata.h
new file mode 100644
index 0000000..216cadf
--- /dev/null
+++ b/src/uqm/globdata.h
@@ -0,0 +1,1059 @@
+//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_GLOBDATA_H_
+#define UQM_GLOBDATA_H_
+
+#include "clock.h"
+#include "libs/gfxlib.h"
+#include "libs/reslib.h"
+#include "libs/sndlib.h"
+#include "sis.h"
+#include "velocity.h"
+#include "commanim.h"
+
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
+
+// general numbers-speech generator info
+// should accomodate most common base-10 languages
+// many languages require various plural forms
+// for digit names like "hundred"
+// possibly needs reworking for others
+typedef struct
+{
+ // an array of these structs must be in ascending remainder order
+ // terminate the array with Divider == 0
+
+ // digit divider, i.e. 1, 10, 100, etc.
+ int Divider;
+ // maximum remainder for this name
+ // name will be used if Number % Divider <= MaxRemainder
+ int MaxRemainder;
+ // string table index for this name
+ // i.e. "hundred" in English
+ COUNT StrIndex;
+} SPEECH_DIGITNAME;
+
+typedef struct
+{
+ // digit divider, i.e. 1, 10, 100, etc.
+ int Divider;
+ // digit sub, i.e. 10 for teens
+ // subtracted from the value to get an index into StrDigits
+ int Subtrahend;
+ // ptr to 10 indices for this digit
+ // index is string table ptr when > 0
+ // is invalid (should not happen) or
+ // is a a 'skip digit' indicator when == 0
+ // StrDigits can be NULL, in which case
+ // the value is interpreted recursively
+ COUNT *StrDigits;
+ // digit Names, can be NULL, in which case
+ // CommonNameIndex is used
+ SPEECH_DIGITNAME *Names;
+ // common digit name string table index
+ // i.e. "hundred" in English
+ COUNT CommonNameIndex;
+} SPEECH_DIGIT;
+
+// this accomodates up to "billions" in english
+#define MAX_SPEECH_DIGITS 7
+
+typedef struct
+{
+ // slots used in Digits array
+ COUNT NumDigits;
+ // slots for each digit in numbers
+ // teens is exception
+ // 0-9, 10-19, ..20-90, ..100-900, etc.
+ SPEECH_DIGIT Digits[MAX_SPEECH_DIGITS];
+} NUMBER_SPEECH_DESC;
+typedef const NUMBER_SPEECH_DESC *NUMBER_SPEECH;
+
+typedef DWORD LDAS_FLAGS;
+#define LDASF_NONE ((LDAS_FLAGS) 0 )
+#define LDASF_USE_ALTERNATE ((LDAS_FLAGS)(1 << 0))
+
+typedef struct
+{
+ void (*init_encounter_func) (void);
+ /* Called when entering communications */
+ void (*post_encounter_func) (void);
+ /* Called when leaving communications or combat normally */
+ COUNT (*uninit_encounter_func) (void);
+ /* Called when encounter is done for cleanup */
+
+ RESOURCE AlienFrameRes;
+ RESOURCE AlienFontRes;
+ Color AlienTextFColor, AlienTextBColor;
+ POINT AlienTextBaseline;
+ COUNT AlienTextWidth;
+ TEXT_ALIGN AlienTextAlign;
+ TEXT_VALIGN AlienTextValign;
+ RESOURCE AlienColorMapRes;
+ RESOURCE AlienSongRes;
+ RESOURCE AlienAltSongRes;
+ LDAS_FLAGS AlienSongFlags;
+
+ RESOURCE ConversationPhrasesRes;
+
+ COUNT NumAnimations;
+ ANIMATION_DESC AlienAmbientArray[MAX_ANIMATIONS];
+
+ // Transition animation to/from talking state;
+ // the first frame is neutral (sort of like YOYO_ANIM)
+ ANIMATION_DESC AlienTransitionDesc;
+ // Talking animation, like RANDOM_ANIM, except random frames
+ // always alternate with a neutral frame;
+ // the first frame is neutral
+ ANIMATION_DESC AlienTalkDesc;
+
+ NUMBER_SPEECH AlienNumberSpeech;
+
+ FRAME AlienFrame;
+ FONT AlienFont;
+ COLORMAP AlienColorMap;
+ MUSIC_REF AlienSong;
+ STRING ConversationPhrases;
+
+} LOCDATA;
+
+enum
+{
+ PORTAL_SPAWNER_DEVICE = 0,
+ TALKING_PET_DEVICE,
+ UTWIG_BOMB_DEVICE,
+ SUN_EFFICIENCY_DEVICE,
+ ROSY_SPHERE_DEVICE,
+ AQUA_HELIX_DEVICE,
+ CLEAR_SPINDLE_DEVICE,
+ ULTRON_0_DEVICE,
+ ULTRON_1_DEVICE,
+ ULTRON_2_DEVICE,
+ ULTRON_3_DEVICE,
+ MAIDENS_DEVICE,
+ UMGAH_HYPERWAVE_DEVICE,
+ BURVIX_HYPERWAVE_DEVICE,
+ DATA_PLATE_1_DEVICE,
+ DATA_PLATE_2_DEVICE,
+ DATA_PLATE_3_DEVICE,
+ TAALO_PROTECTOR_DEVICE,
+ EGG_CASING0_DEVICE,
+ EGG_CASING1_DEVICE,
+ EGG_CASING2_DEVICE,
+ SYREEN_SHUTTLE_DEVICE,
+ VUX_BEAST_DEVICE,
+ DESTRUCT_CODE_DEVICE,
+ URQUAN_WARP_DEVICE,
+ ARTIFACT_2_DEVICE,
+ ARTIFACT_3_DEVICE,
+ LUNAR_BASE_DEVICE,
+
+ NUM_DEVICES
+};
+
+#define YEARS_TO_KOHRAH_VICTORY 4
+
+#define START_GAME_STATE enum {
+#define ADD_GAME_STATE(SName,NumBits) SName, END_##SName = SName + NumBits - 1,
+#define END_GAME_STATE NUM_GAME_STATE_BITS };
+
+START_GAME_STATE
+ /* Shofixti states */
+ ADD_GAME_STATE (SHOFIXTI_VISITS, 3)
+ ADD_GAME_STATE (SHOFIXTI_STACK1, 2)
+ ADD_GAME_STATE (SHOFIXTI_STACK2, 3)
+ ADD_GAME_STATE (SHOFIXTI_STACK3, 2)
+ ADD_GAME_STATE (SHOFIXTI_KIA, 1)
+ ADD_GAME_STATE (SHOFIXTI_BRO_KIA, 1)
+ ADD_GAME_STATE (SHOFIXTI_RECRUITED, 1)
+
+ ADD_GAME_STATE (SHOFIXTI_MAIDENS, 1) /* Did you find the babes yet? */
+ ADD_GAME_STATE (MAIDENS_ON_SHIP, 1)
+ ADD_GAME_STATE (BATTLE_SEGUE, 1)
+ /* Set to 0 in init_xxx_comm() if communications directly
+ * follows an encounter.
+ * Set to 1 in init_xxx_comm() if the player gets to decide
+ * whether to attack or talk.
+ * Set to 1 in communication when battle follows the
+ * communication. It is still valid when uninit_xxx_comm() gets
+ * called after combat or communication.
+ */
+ ADD_GAME_STATE (PLANETARY_LANDING, 1)
+ ADD_GAME_STATE (PLANETARY_CHANGE, 1)
+ /* Flag set to 1 when the planet information for the current
+ * world is changed since it was last saved to the starinfo.dat
+ * file. Set when picking up bio, mineral, or energy nodes.
+ * When there's no current world, it should be 0.
+ */
+
+ /* Spathi states */
+ ADD_GAME_STATE (SPATHI_VISITS, 3)
+ ADD_GAME_STATE (SPATHI_HOME_VISITS, 3)
+ ADD_GAME_STATE (FOUND_PLUTO_SPATHI, 2)
+ /* 0 - Haven't met Fwiffo.
+ * 1 - Met Fwiffo on Pluto, now talking to him.
+ * 2 - Met Fwiffo on Pluto, after dialog.
+ * 3 - Met Fwiffo, and have reported to the Safe Ones on
+ * the Spathi moon that he was either killed, or that
+ * you have him on board.
+ */
+ ADD_GAME_STATE (SPATHI_SHIELDED_SELVES, 1)
+ ADD_GAME_STATE (SPATHI_CREATURES_EXAMINED, 1)
+ ADD_GAME_STATE (SPATHI_CREATURES_ELIMINATED, 1)
+ ADD_GAME_STATE (UMGAH_BROADCASTERS, 1)
+ ADD_GAME_STATE (SPATHI_MANNER, 2)
+ ADD_GAME_STATE (SPATHI_QUEST, 1)
+ ADD_GAME_STATE (LIED_ABOUT_CREATURES, 2)
+ ADD_GAME_STATE (SPATHI_PARTY, 1)
+ ADD_GAME_STATE (KNOW_SPATHI_PASSWORD, 1)
+
+ ADD_GAME_STATE (ILWRATH_HOME_VISITS, 3)
+ ADD_GAME_STATE (ILWRATH_CHMMR_VISITS, 1)
+
+ ADD_GAME_STATE (ARILOU_SPACE, 1)
+ /* 0 if the periodically opening QuasiSpace portal is
+ * closed or closing.
+ * 1 if the periodically opening QuasiSpace portal is
+ * open or opening.
+ */
+ ADD_GAME_STATE (ARILOU_SPACE_SIDE, 2)
+ /* 0 if in HyperSpace and not just emerged from the periodically
+ * opening QuasiSpace portal.
+ * 1 if in HyperSpace and just emerged from the periodically
+ * QuasiSpace portal (still on the portal).
+ * 2 if in QuasiSpace and just emerged from the periodically
+ * opening portal (still on the portal).
+ * 3 if in QuasiSpace and not just emerged from the
+ * periodically opening portal.
+ */
+ ADD_GAME_STATE (ARILOU_SPACE_COUNTER, 4)
+ /* Keeps track of how far the periodically opening QuasiSpace
+ * portal is open. (This determines the image)
+ * 0 <= ARILOU_SPACE_COUNTER <= 9
+ * 0 means totally closed.
+ * 9 means completely open.
+ */
+
+ ADD_GAME_STATE (LANDER_SHIELDS, 4)
+
+ ADD_GAME_STATE (MET_MELNORME, 1)
+ ADD_GAME_STATE (MELNORME_RESCUE_REFUSED, 1)
+ ADD_GAME_STATE (MELNORME_RESCUE_COUNT, 3)
+ ADD_GAME_STATE (TRADED_WITH_MELNORME, 1)
+ ADD_GAME_STATE (WHY_MELNORME_PURPLE, 1)
+ ADD_GAME_STATE (MELNORME_CREDIT0, 8)
+ ADD_GAME_STATE (MELNORME_CREDIT1, 8)
+ ADD_GAME_STATE (MELNORME_BUSINESS_COUNT, 2)
+ ADD_GAME_STATE (MELNORME_YACK_STACK0, 2)
+ ADD_GAME_STATE (MELNORME_YACK_STACK1, 2)
+ ADD_GAME_STATE (MELNORME_YACK_STACK2, 4)
+ ADD_GAME_STATE (MELNORME_YACK_STACK3, 3)
+ ADD_GAME_STATE (MELNORME_YACK_STACK4, 2)
+ ADD_GAME_STATE (WHY_MELNORME_BLUE, 1)
+ ADD_GAME_STATE (MELNORME_ANGER, 2)
+ ADD_GAME_STATE (MELNORME_MIFFED_COUNT, 2)
+ ADD_GAME_STATE (MELNORME_PISSED_COUNT, 2)
+ ADD_GAME_STATE (MELNORME_HATE_COUNT, 2)
+
+ ADD_GAME_STATE (PROBE_MESSAGE_DELIVERED, 1)
+ ADD_GAME_STATE (PROBE_ILWRATH_ENCOUNTER, 1)
+
+ ADD_GAME_STATE (STARBASE_AVAILABLE, 1)
+ ADD_GAME_STATE (STARBASE_VISITED, 1)
+ ADD_GAME_STATE (RADIOACTIVES_PROVIDED, 1)
+ ADD_GAME_STATE (LANDERS_LOST, 1)
+ ADD_GAME_STATE (GIVEN_FUEL_BEFORE, 1)
+
+ ADD_GAME_STATE (AWARE_OF_SAMATRA, 1)
+ ADD_GAME_STATE (YEHAT_CAVALRY_ARRIVED, 1)
+ ADD_GAME_STATE (URQUAN_MESSED_UP, 1)
+
+ ADD_GAME_STATE (MOONBASE_DESTROYED, 1)
+ ADD_GAME_STATE (WILL_DESTROY_BASE, 1)
+
+ ADD_GAME_STATE (ARTIFACT_2_ON_SHIP, 1)
+ ADD_GAME_STATE (ARTIFACT_3_ON_SHIP, 1)
+
+ ADD_GAME_STATE (KOHR_AH_KILLED_ALL, 1)
+
+ ADD_GAME_STATE (STARBASE_YACK_STACK1, 1)
+
+ ADD_GAME_STATE (DISCUSSED_PORTAL_SPAWNER, 1)
+ ADD_GAME_STATE (DISCUSSED_TALKING_PET, 1)
+ ADD_GAME_STATE (DISCUSSED_UTWIG_BOMB, 1)
+ ADD_GAME_STATE (DISCUSSED_SUN_EFFICIENCY, 1)
+ ADD_GAME_STATE (DISCUSSED_ROSY_SPHERE, 1)
+ ADD_GAME_STATE (DISCUSSED_AQUA_HELIX, 1)
+ ADD_GAME_STATE (DISCUSSED_CLEAR_SPINDLE, 1)
+ ADD_GAME_STATE (DISCUSSED_ULTRON, 1)
+ ADD_GAME_STATE (DISCUSSED_MAIDENS, 1)
+ ADD_GAME_STATE (DISCUSSED_UMGAH_HYPERWAVE, 1)
+ ADD_GAME_STATE (DISCUSSED_BURVIX_HYPERWAVE, 1)
+ ADD_GAME_STATE (SYREEN_WANT_PROOF, 1)
+ ADD_GAME_STATE (PLAYER_HAVING_SEX, 1)
+ ADD_GAME_STATE (MET_ARILOU, 1)
+ ADD_GAME_STATE (DISCUSSED_TAALO_PROTECTOR, 1)
+ ADD_GAME_STATE (DISCUSSED_EGG_CASING0, 1)
+ ADD_GAME_STATE (DISCUSSED_EGG_CASING1, 1)
+ ADD_GAME_STATE (DISCUSSED_EGG_CASING2, 1)
+ ADD_GAME_STATE (DISCUSSED_SYREEN_SHUTTLE, 1)
+ ADD_GAME_STATE (DISCUSSED_VUX_BEAST, 1)
+ ADD_GAME_STATE (DISCUSSED_DESTRUCT_CODE, 1)
+ ADD_GAME_STATE (DISCUSSED_URQUAN_WARP, 1)
+ ADD_GAME_STATE (DISCUSSED_ARTIFACT_2, 1)
+ ADD_GAME_STATE (DISCUSSED_ARTIFACT_3, 1)
+
+ ADD_GAME_STATE (ATTACKED_DRUUGE, 1)
+
+ ADD_GAME_STATE (NEW_ALLIANCE_NAME, 2)
+
+ ADD_GAME_STATE (PORTAL_COUNTER, 4)
+ /* Set to 1 when the player opens a QuasiSpace portal.
+ * It will then be increased to 10, at which time
+ * the portal is completely open. (This determines the image).
+ */
+
+ ADD_GAME_STATE (BURVIXESE_BROADCASTERS, 1)
+ ADD_GAME_STATE (BURV_BROADCASTERS_ON_SHIP, 1)
+
+ ADD_GAME_STATE (UTWIG_BOMB, 1)
+ ADD_GAME_STATE (UTWIG_BOMB_ON_SHIP, 1)
+
+ ADD_GAME_STATE (AQUA_HELIX, 1)
+ ADD_GAME_STATE (AQUA_HELIX_ON_SHIP, 1)
+
+ ADD_GAME_STATE (SUN_DEVICE, 1)
+ ADD_GAME_STATE (SUN_DEVICE_ON_SHIP, 1)
+
+ ADD_GAME_STATE (TAALO_PROTECTOR, 1)
+ ADD_GAME_STATE (TAALO_PROTECTOR_ON_SHIP, 1)
+
+ ADD_GAME_STATE (SHIP_VAULT_UNLOCKED, 1)
+ ADD_GAME_STATE (SYREEN_SHUTTLE, 1)
+
+ ADD_GAME_STATE (PORTAL_KEY, 1)
+ ADD_GAME_STATE (PORTAL_KEY_ON_SHIP, 1)
+
+ ADD_GAME_STATE (VUX_BEAST, 1)
+ ADD_GAME_STATE (VUX_BEAST_ON_SHIP, 1)
+
+ ADD_GAME_STATE (TALKING_PET, 1)
+ ADD_GAME_STATE (TALKING_PET_ON_SHIP, 1)
+
+ ADD_GAME_STATE (MOONBASE_ON_SHIP, 1)
+
+ ADD_GAME_STATE (KOHR_AH_FRENZY, 1)
+ ADD_GAME_STATE (KOHR_AH_VISITS, 2)
+ ADD_GAME_STATE (KOHR_AH_BYES, 1)
+
+ ADD_GAME_STATE (SLYLANDRO_HOME_VISITS, 3)
+ ADD_GAME_STATE (DESTRUCT_CODE_ON_SHIP, 1)
+
+ ADD_GAME_STATE (ILWRATH_VISITS, 3)
+ ADD_GAME_STATE (ILWRATH_DECEIVED, 1)
+ ADD_GAME_STATE (FLAGSHIP_CLOAKED, 1)
+
+ ADD_GAME_STATE (MYCON_VISITS, 3)
+ ADD_GAME_STATE (MYCON_HOME_VISITS, 3)
+ ADD_GAME_STATE (MYCON_AMBUSH, 1)
+ ADD_GAME_STATE (MYCON_FELL_FOR_AMBUSH, 1)
+ /* Set to 1 when the Mycon have been told about Organon
+ * and are moving towards it.
+ */
+
+ ADD_GAME_STATE (GLOBAL_FLAGS_AND_DATA, 8)
+ /* This state seems to be used to distinguish between different
+ * places where one may have an conversation with an alien.
+ * Like home world, other world, space.
+ * Why this needs 8 bits I don't know. Only specific
+ * combinations of bits seem to be used (0, 1, or all bits).
+ * A closer investigation is desirable. - SvdB
+ * Bit 4 is set when initiating communication with the Ilwrath
+ * homeworld by means of a HyperWave Broadcaster.
+ * Bit 5 is set when initiating communication with an Ilwrath
+ * ship by means of a HyperWave Broadcaster.
+ * All bits are cleared when communication is over.
+ */
+
+ ADD_GAME_STATE (ORZ_VISITS, 3)
+ ADD_GAME_STATE (TAALO_VISITS, 3)
+ ADD_GAME_STATE (ORZ_MANNER, 2)
+
+ ADD_GAME_STATE (PROBE_EXHIBITED_BUG, 1)
+ ADD_GAME_STATE (CLEAR_SPINDLE_ON_SHIP, 1)
+
+ ADD_GAME_STATE (URQUAN_VISITS, 3)
+ ADD_GAME_STATE (PLAYER_HYPNOTIZED, 1)
+
+ ADD_GAME_STATE (VUX_VISITS, 3)
+ ADD_GAME_STATE (VUX_HOME_VISITS, 3)
+ ADD_GAME_STATE (ZEX_VISITS, 3)
+ ADD_GAME_STATE (ZEX_IS_DEAD, 1)
+ ADD_GAME_STATE (KNOW_ZEX_WANTS_MONSTER, 1)
+
+ ADD_GAME_STATE (UTWIG_VISITS, 3)
+ ADD_GAME_STATE (UTWIG_HOME_VISITS, 3)
+ ADD_GAME_STATE (BOMB_VISITS, 3)
+ ADD_GAME_STATE (ULTRON_CONDITION, 3)
+ /* 0 if the Supox still have the Ultron
+ * 1 if the Captain has the Ultron, completely broken
+ * 2 if the Captain has the Ultron, with 1 fix
+ * 3 if the Captain has the Ultron, with 2 fixes
+ * 4 if the Captain has the Ultron, completely restored
+ * 5 if the Ultron has been returned to the Utwig
+ */
+ ADD_GAME_STATE (UTWIG_HAVE_ULTRON, 1)
+ ADD_GAME_STATE (BOMB_UNPROTECTED, 1)
+
+ ADD_GAME_STATE (TAALO_UNPROTECTED, 1)
+
+ ADD_GAME_STATE (TALKING_PET_VISITS, 3)
+ ADD_GAME_STATE (TALKING_PET_HOME_VISITS, 3)
+ ADD_GAME_STATE (UMGAH_ZOMBIE_BLOBBIES, 1)
+ /* The Umgah have come under the influence of the Talking Pet */
+ ADD_GAME_STATE (KNOW_UMGAH_ZOMBIES, 1)
+ /* The Captain is aware that something is up with the Umgah */
+
+ ADD_GAME_STATE (ARILOU_VISITS, 3)
+ ADD_GAME_STATE (ARILOU_HOME_VISITS, 3)
+ ADD_GAME_STATE (KNOW_ARILOU_WANT_WRECK, 1)
+ ADD_GAME_STATE (ARILOU_CHECKED_UMGAH, 2)
+ ADD_GAME_STATE (PORTAL_SPAWNER, 1)
+ ADD_GAME_STATE (PORTAL_SPAWNER_ON_SHIP, 1)
+
+ ADD_GAME_STATE (UMGAH_VISITS, 3)
+ ADD_GAME_STATE (UMGAH_HOME_VISITS, 3)
+ ADD_GAME_STATE (MET_NORMAL_UMGAH, 1)
+
+ ADD_GAME_STATE (SYREEN_HOME_VISITS, 3)
+ ADD_GAME_STATE (SYREEN_SHUTTLE_ON_SHIP, 1)
+ ADD_GAME_STATE (KNOW_SYREEN_VAULT, 1)
+
+ ADD_GAME_STATE (EGG_CASE0_ON_SHIP, 1)
+ ADD_GAME_STATE (SUN_DEVICE_UNGUARDED, 1)
+
+ ADD_GAME_STATE (ROSY_SPHERE_ON_SHIP, 1)
+ /* The Rosy Sphere is aboard the flagship, i.e. It has been
+ * acquired from the Druuge, but not yet inserted in the broken
+ * Ultron. cf. ROSY_SPHERE */
+
+ ADD_GAME_STATE (CHMMR_HOME_VISITS, 3)
+ ADD_GAME_STATE (CHMMR_EMERGING, 1)
+ ADD_GAME_STATE (CHMMR_UNLEASHED, 1)
+ ADD_GAME_STATE (CHMMR_BOMB_STATE, 2)
+ /* 0 - Nothing is known about the Precursor Bomb.
+ * 1 - The captain knows from the Chmmr that some extremely
+ * powerful weapon is needed to destroy the Sa-Matra.
+ * 2 - Installation of the precursor bomb has started.
+ * 3 - Left the starbase after installation of the Precursor bomb.
+ */
+
+ ADD_GAME_STATE (DRUUGE_DISCLAIMER, 1)
+
+ ADD_GAME_STATE (YEHAT_VISITS, 3)
+ ADD_GAME_STATE (YEHAT_REBEL_VISITS, 3)
+ ADD_GAME_STATE (YEHAT_HOME_VISITS, 3)
+ ADD_GAME_STATE (YEHAT_CIVIL_WAR, 1)
+ ADD_GAME_STATE (YEHAT_ABSORBED_PKUNK, 1)
+ ADD_GAME_STATE (YEHAT_SHIP_MONTH, 4)
+ ADD_GAME_STATE (YEHAT_SHIP_DAY, 5)
+ ADD_GAME_STATE (YEHAT_SHIP_YEAR, 5)
+
+ ADD_GAME_STATE (CLEAR_SPINDLE, 1)
+ ADD_GAME_STATE (PKUNK_VISITS, 3)
+ ADD_GAME_STATE (PKUNK_HOME_VISITS, 3)
+ ADD_GAME_STATE (PKUNK_SHIP_MONTH, 4)
+ /* The month in PKUNK_SHIP_YEAR that new ships are available
+ * from the Pkunk. */
+ ADD_GAME_STATE (PKUNK_SHIP_DAY, 5)
+ /* The day of the month in PKUNK_SHIP_MONTH in PKUNK_SHIP_YEAR
+ * that new ships are available. */
+ ADD_GAME_STATE (PKUNK_SHIP_YEAR, 5)
+ /* The year that new ships are available from the Pkunk
+ * (stored as an offset from the year the game starts). */
+ ADD_GAME_STATE (PKUNK_MISSION, 3)
+
+ ADD_GAME_STATE (SUPOX_VISITS, 3)
+ ADD_GAME_STATE (SUPOX_HOME_VISITS, 3)
+
+ ADD_GAME_STATE (THRADD_VISITS, 3)
+ ADD_GAME_STATE (THRADD_HOME_VISITS, 3)
+ ADD_GAME_STATE (HELIX_VISITS, 3)
+ ADD_GAME_STATE (HELIX_UNPROTECTED, 1)
+ ADD_GAME_STATE (THRADD_CULTURE, 2)
+ ADD_GAME_STATE (THRADD_MISSION, 3)
+ /* 0 if the Thraddash fleet hasn't left the Thraddash home world.
+ * 1 if the Thraddash are heading towards Kohr-Ah territory.
+ * 2 if the Thraddash are fighting the Kohr-Ah.
+ * 3 if the Thraddash are returning from Kohr-Ah territory.
+ * 4 if the Thraddash fleet is back at the Thraddash home world.
+ */
+
+ ADD_GAME_STATE (DRUUGE_VISITS, 3)
+ ADD_GAME_STATE (DRUUGE_HOME_VISITS, 3)
+ ADD_GAME_STATE (ROSY_SPHERE, 1)
+ /* The play has or has had the Rosy Sphere.
+ * cf. ROSY_SHERE_ON_SHIP */
+ ADD_GAME_STATE (SCANNED_MAIDENS, 1)
+ ADD_GAME_STATE (SCANNED_FRAGMENTS, 1)
+ ADD_GAME_STATE (SCANNED_CASTER, 1)
+ ADD_GAME_STATE (SCANNED_SPAWNER, 1)
+ ADD_GAME_STATE (SCANNED_ULTRON, 1)
+
+ ADD_GAME_STATE (ZOQFOT_INFO, 2)
+ ADD_GAME_STATE (ZOQFOT_HOSTILE, 1)
+ ADD_GAME_STATE (ZOQFOT_HOME_VISITS, 3)
+ ADD_GAME_STATE (MET_ZOQFOT, 1)
+ ADD_GAME_STATE (ZOQFOT_DISTRESS, 2)
+ /* 0 if the Zoq-Fot-Pik aren't in distress
+ * 1 if the Zoq-Fot-Pik are under attack by the Kohr-Ah
+ * 2 if the Zoq-Fot-Pik have been destroyed because of this
+ * attack (not by the Kohr-Ah final victory cleansing)
+ */
+
+ ADD_GAME_STATE (EGG_CASE1_ON_SHIP, 1)
+ ADD_GAME_STATE (EGG_CASE2_ON_SHIP, 1)
+ ADD_GAME_STATE (MYCON_SUN_VISITS, 3)
+ ADD_GAME_STATE (ORZ_HOME_VISITS, 3)
+
+ ADD_GAME_STATE (MELNORME_FUEL_PROCEDURE, 1)
+ ADD_GAME_STATE (MELNORME_TECH_PROCEDURE, 1)
+ ADD_GAME_STATE (MELNORME_INFO_PROCEDURE, 1)
+
+ ADD_GAME_STATE (MELNORME_TECH_STACK, 4)
+ /* MELNORME_TECH_STACK is now unused */
+ ADD_GAME_STATE (MELNORME_EVENTS_INFO_STACK, 5)
+ ADD_GAME_STATE (MELNORME_ALIEN_INFO_STACK, 5)
+ ADD_GAME_STATE (MELNORME_HISTORY_INFO_STACK, 5)
+
+ ADD_GAME_STATE (RAINBOW_WORLD0, 8)
+ /* Low byte of a bit array, one bit per rainbow world.
+ * Each bit is set if the rainbow world has been visited.
+ * The lowest bit is for the first star in the star_array
+ * with RAINBOW_DEFINED, and so on.
+ */
+ ADD_GAME_STATE (RAINBOW_WORLD1, 2)
+ /* High 2 bits of the bit array of which RAINBOW_WORLD0
+ * is the low byte.
+ */
+ ADD_GAME_STATE (MELNORME_RAINBOW_COUNT, 4)
+ /* The number of rainbow world locations sold to the Melnorme. */
+
+ ADD_GAME_STATE (USED_BROADCASTER, 1)
+ ADD_GAME_STATE (BROADCASTER_RESPONSE, 1)
+
+ ADD_GAME_STATE (IMPROVED_LANDER_SPEED, 1)
+ ADD_GAME_STATE (IMPROVED_LANDER_CARGO, 1)
+ ADD_GAME_STATE (IMPROVED_LANDER_SHOT, 1)
+
+ ADD_GAME_STATE (MET_ORZ_BEFORE, 1)
+ ADD_GAME_STATE (YEHAT_REBEL_TOLD_PKUNK, 1)
+ ADD_GAME_STATE (PLAYER_HAD_SEX, 1)
+ ADD_GAME_STATE (UMGAH_BROADCASTERS_ON_SHIP, 1)
+
+ ADD_GAME_STATE (LIGHT_MINERAL_LOAD, 3)
+ ADD_GAME_STATE (MEDIUM_MINERAL_LOAD, 3)
+ ADD_GAME_STATE (HEAVY_MINERAL_LOAD, 3)
+
+ ADD_GAME_STATE (STARBASE_BULLETS0, 8)
+ ADD_GAME_STATE (STARBASE_BULLETS1, 8)
+ ADD_GAME_STATE (STARBASE_BULLETS2, 8)
+ ADD_GAME_STATE (STARBASE_BULLETS3, 8)
+
+ ADD_GAME_STATE (STARBASE_MONTH, 4)
+ ADD_GAME_STATE (STARBASE_DAY, 5)
+
+ ADD_GAME_STATE (CREW_SOLD_TO_DRUUGE0, 8)
+ ADD_GAME_STATE (CREW_PURCHASED0, 8)
+ ADD_GAME_STATE (CREW_PURCHASED1, 8)
+
+ ADD_GAME_STATE (URQUAN_PROTECTING_SAMATRA, 1)
+
+#define THRADDASH_BODY_THRESHOLD 25
+ ADD_GAME_STATE (THRADDASH_BODY_COUNT, 5)
+
+ ADD_GAME_STATE (UTWIG_SUPOX_MISSION, 3)
+ /* 0 if the Utwig and Supox fleet haven't left their home world.
+ * 1 if the U&S are on their way towards the Kohr-Ah
+ * 2 if the U&S are fighting the Kohr-Ah (first 80 days)
+ * 3 does not occur
+ * 4 if the U&S are fighting the Kohr-Ah (second 80 days)
+ * 5 if the U&S are returning home.
+ * 6 if the U&S are back at their home world.
+ */
+ ADD_GAME_STATE (SPATHI_INFO, 3)
+
+ ADD_GAME_STATE (ILWRATH_INFO, 2)
+ ADD_GAME_STATE (ILWRATH_GODS_SPOKEN, 4)
+ ADD_GAME_STATE (ILWRATH_WORSHIP, 2)
+ ADD_GAME_STATE (ILWRATH_FIGHT_THRADDASH, 1)
+
+ ADD_GAME_STATE (READY_TO_CONFUSE_URQUAN, 1)
+ ADD_GAME_STATE (URQUAN_HYPNO_VISITS, 1)
+ ADD_GAME_STATE (MENTIONED_PET_COMPULSION, 1)
+ ADD_GAME_STATE (URQUAN_INFO, 2)
+ ADD_GAME_STATE (KNOW_URQUAN_STORY, 2)
+
+ ADD_GAME_STATE (MYCON_INFO, 4)
+ ADD_GAME_STATE (MYCON_RAMBLE, 5)
+ ADD_GAME_STATE (KNOW_ABOUT_SHATTERED, 2)
+ /* 0 if the player doesn't known about shattered worlds
+ * 1 if the player has encountered a shattered world
+ * 2 if the player knows that shatterred worlds are caused
+ * by Mycon deep children.
+ * 3 if the player has told the Syreen that Mycon Deep Children
+ * cause shattered worlds. Proof doesn't have to be presented
+ * yet at this time.
+ */
+ ADD_GAME_STATE (MYCON_INSULTS, 3)
+ ADD_GAME_STATE (MYCON_KNOW_AMBUSH, 1)
+ /* Set to 1 when the Mycon have been butchered at Organon,
+ * just before the remaining Mycon head back home.
+ */
+
+ ADD_GAME_STATE (SYREEN_INFO, 2)
+ ADD_GAME_STATE (KNOW_SYREEN_WORLD_SHATTERED, 1)
+ ADD_GAME_STATE (SYREEN_KNOW_ABOUT_MYCON, 1)
+
+ ADD_GAME_STATE (TALKING_PET_INFO, 3)
+ ADD_GAME_STATE (TALKING_PET_SUGGESTIONS, 3)
+ ADD_GAME_STATE (LEARNED_TALKING_PET, 1)
+ ADD_GAME_STATE (DNYARRI_LIED, 1)
+ /* Set when the Talking Pet tells you his version of their
+ * race's history with the Ur-Quan.
+ * Cleared once you confront him about this lie.
+ */
+ ADD_GAME_STATE (SHIP_TO_COMPEL, 1)
+
+ ADD_GAME_STATE (ORZ_GENERAL_INFO, 2)
+ ADD_GAME_STATE (ORZ_PERSONAL_INFO, 3)
+ ADD_GAME_STATE (ORZ_ANDRO_STATE, 2)
+ ADD_GAME_STATE (REFUSED_ORZ_ALLIANCE, 1)
+
+ ADD_GAME_STATE (PKUNK_MANNER, 2)
+ /* 0 not met the Pkunk
+ * 1 fought the Pkunk, but relations are still salvagable.
+ * 2 hostile relations with the Pkunk, no way back.
+ * 3 friendly relations with the Pkunk
+ */
+ ADD_GAME_STATE (PKUNK_ON_THE_MOVE, 1)
+ ADD_GAME_STATE (PKUNK_FLEET, 2)
+ ADD_GAME_STATE (PKUNK_MIGRATE, 2)
+ ADD_GAME_STATE (PKUNK_RETURN, 1)
+ ADD_GAME_STATE (PKUNK_WORRY, 2)
+ ADD_GAME_STATE (PKUNK_INFO, 3)
+ ADD_GAME_STATE (PKUNK_WAR, 2)
+ ADD_GAME_STATE (PKUNK_FORTUNE, 3)
+ ADD_GAME_STATE (PKUNK_MIGRATE_VISITS, 3)
+ ADD_GAME_STATE (PKUNK_REASONS, 4)
+ ADD_GAME_STATE (PKUNK_SWITCH, 1)
+ ADD_GAME_STATE (PKUNK_SENSE_VICTOR, 1)
+
+ ADD_GAME_STATE (KOHR_AH_REASONS, 2)
+ ADD_GAME_STATE (KOHR_AH_PLEAD, 2)
+ ADD_GAME_STATE (KOHR_AH_INFO, 2)
+ ADD_GAME_STATE (KNOW_KOHR_AH_STORY, 2)
+ ADD_GAME_STATE (KOHR_AH_SENSES_EVIL, 1)
+ ADD_GAME_STATE (URQUAN_SENSES_EVIL, 1)
+
+ ADD_GAME_STATE (SLYLANDRO_PROBE_VISITS, 3)
+ ADD_GAME_STATE (SLYLANDRO_PROBE_THREAT, 2)
+ ADD_GAME_STATE (SLYLANDRO_PROBE_WRONG, 2)
+ ADD_GAME_STATE (SLYLANDRO_PROBE_ID, 2)
+ ADD_GAME_STATE (SLYLANDRO_PROBE_INFO, 2)
+ ADD_GAME_STATE (SLYLANDRO_PROBE_EXIT, 2)
+
+ ADD_GAME_STATE (UMGAH_HOSTILE, 1)
+ ADD_GAME_STATE (UMGAH_EVIL_BLOBBIES, 1)
+ ADD_GAME_STATE (UMGAH_MENTIONED_TRICKS, 2)
+
+ ADD_GAME_STATE (BOMB_CARRIER, 1)
+ /* 0 when the flagship is not in battle, or it doesn't have the
+ * enhanced precursor bomb installed.
+ * 1 when the flagship is in battle and the bomb is installed.
+ * This determines whether you can flee (if the warp escape unit
+ * is installed at all), and whether taking the ship into the
+ * Sa-Matra defense structure will trigger the end of the game.
+ */
+
+ ADD_GAME_STATE (THRADD_MANNER, 1)
+ ADD_GAME_STATE (THRADD_INTRO, 2)
+ ADD_GAME_STATE (THRADD_DEMEANOR, 3)
+ ADD_GAME_STATE (THRADD_INFO, 2)
+ ADD_GAME_STATE (THRADD_BODY_LEVEL, 2)
+ ADD_GAME_STATE (THRADD_MISSION_VISITS, 1)
+ ADD_GAME_STATE (THRADD_STACK_1, 3)
+ ADD_GAME_STATE (THRADD_HOSTILE_STACK_2, 1)
+ ADD_GAME_STATE (THRADD_HOSTILE_STACK_3, 1)
+ ADD_GAME_STATE (THRADD_HOSTILE_STACK_4, 1)
+ ADD_GAME_STATE (THRADD_HOSTILE_STACK_5, 1)
+
+ ADD_GAME_STATE (CHMMR_STACK, 2)
+
+ ADD_GAME_STATE (ARILOU_MANNER, 2)
+ ADD_GAME_STATE (NO_PORTAL_VISITS, 1)
+ ADD_GAME_STATE (ARILOU_STACK_1, 2)
+ ADD_GAME_STATE (ARILOU_STACK_2, 1)
+ ADD_GAME_STATE (ARILOU_STACK_3, 2)
+ ADD_GAME_STATE (ARILOU_STACK_4, 1)
+ ADD_GAME_STATE (ARILOU_STACK_5, 2)
+ ADD_GAME_STATE (ARILOU_INFO, 2)
+ ADD_GAME_STATE (ARILOU_HINTS, 2)
+
+ ADD_GAME_STATE (DRUUGE_MANNER, 1)
+ ADD_GAME_STATE (DRUUGE_SPACE_INFO, 2)
+ ADD_GAME_STATE (DRUUGE_HOME_INFO, 2)
+ ADD_GAME_STATE (DRUUGE_SALVAGE, 1)
+ ADD_GAME_STATE (KNOW_DRUUGE_SLAVERS, 2)
+ ADD_GAME_STATE (FRAGMENTS_BOUGHT, 2)
+
+ ADD_GAME_STATE (ZEX_STACK_1, 2)
+ ADD_GAME_STATE (ZEX_STACK_2, 2)
+ ADD_GAME_STATE (ZEX_STACK_3, 2)
+
+ ADD_GAME_STATE (VUX_INFO, 2)
+ ADD_GAME_STATE (VUX_STACK_1, 4)
+ ADD_GAME_STATE (VUX_STACK_2, 2)
+ ADD_GAME_STATE (VUX_STACK_3, 2)
+ ADD_GAME_STATE (VUX_STACK_4, 2)
+
+ ADD_GAME_STATE (SHOFIXTI_STACK4, 2)
+
+ ADD_GAME_STATE (YEHAT_REBEL_INFO, 3)
+ ADD_GAME_STATE (YEHAT_ROYALIST_INFO, 1)
+ ADD_GAME_STATE (YEHAT_ROYALIST_TOLD_PKUNK, 1)
+ ADD_GAME_STATE (NO_YEHAT_ALLY_HOME, 1)
+ ADD_GAME_STATE (NO_YEHAT_HELP_HOME, 1)
+ ADD_GAME_STATE (NO_YEHAT_INFO, 1)
+ ADD_GAME_STATE (NO_YEHAT_ALLY_SPACE, 2)
+ ADD_GAME_STATE (NO_YEHAT_HELP_SPACE, 2)
+
+ ADD_GAME_STATE (ZOQFOT_KNOW_MASK, 4)
+
+ ADD_GAME_STATE (SUPOX_HOSTILE, 1)
+ ADD_GAME_STATE (SUPOX_INFO, 1)
+ ADD_GAME_STATE (SUPOX_WAR_NEWS, 2)
+ ADD_GAME_STATE (SUPOX_ULTRON_HELP, 1)
+ ADD_GAME_STATE (SUPOX_STACK1, 3)
+ ADD_GAME_STATE (SUPOX_STACK2, 2)
+
+ ADD_GAME_STATE (UTWIG_HOSTILE, 1)
+ ADD_GAME_STATE (UTWIG_INFO, 1)
+ ADD_GAME_STATE (UTWIG_WAR_NEWS, 2)
+ ADD_GAME_STATE (UTWIG_STACK1, 3)
+ ADD_GAME_STATE (UTWIG_STACK2, 2)
+ ADD_GAME_STATE (BOMB_INFO, 1)
+ ADD_GAME_STATE (BOMB_STACK1, 2)
+ ADD_GAME_STATE (BOMB_STACK2, 2)
+
+ ADD_GAME_STATE (SLYLANDRO_KNOW_BROKEN, 1)
+ ADD_GAME_STATE (PLAYER_KNOWS_PROBE, 1)
+ ADD_GAME_STATE (PLAYER_KNOWS_PROGRAM, 1)
+ ADD_GAME_STATE (PLAYER_KNOWS_EFFECTS, 1)
+ ADD_GAME_STATE (PLAYER_KNOWS_PRIORITY, 1)
+ ADD_GAME_STATE (SLYLANDRO_STACK1, 3)
+ ADD_GAME_STATE (SLYLANDRO_STACK2, 1)
+ ADD_GAME_STATE (SLYLANDRO_STACK3, 2)
+ ADD_GAME_STATE (SLYLANDRO_STACK4, 2)
+ ADD_GAME_STATE (SLYLANDRO_STACK5, 1)
+ ADD_GAME_STATE (SLYLANDRO_STACK6, 1)
+ ADD_GAME_STATE (SLYLANDRO_STACK7, 2)
+ ADD_GAME_STATE (SLYLANDRO_STACK8, 2)
+ ADD_GAME_STATE (SLYLANDRO_STACK9, 2)
+ ADD_GAME_STATE (SLYLANDRO_KNOW_EARTH, 1)
+ ADD_GAME_STATE (SLYLANDRO_KNOW_EXPLORE, 1)
+ ADD_GAME_STATE (SLYLANDRO_KNOW_GATHER, 1)
+ ADD_GAME_STATE (SLYLANDRO_KNOW_URQUAN, 2)
+ ADD_GAME_STATE (RECALL_VISITS, 2)
+
+ ADD_GAME_STATE (SLYLANDRO_MULTIPLIER, 3)
+ ADD_GAME_STATE (KNOW_SPATHI_QUEST, 1)
+ ADD_GAME_STATE (KNOW_SPATHI_EVIL, 1)
+
+ ADD_GAME_STATE (BATTLE_PLANET, 8)
+ ADD_GAME_STATE (ESCAPE_COUNTER, 8)
+
+ ADD_GAME_STATE (CREW_SOLD_TO_DRUUGE1, 8)
+ ADD_GAME_STATE (PKUNK_DONE_WAR, 1)
+
+ ADD_GAME_STATE (SYREEN_STACK0, 2)
+ ADD_GAME_STATE (SYREEN_STACK1, 2)
+ ADD_GAME_STATE (SYREEN_STACK2, 2)
+
+ ADD_GAME_STATE (REFUSED_ULTRON_AT_BOMB, 1)
+ ADD_GAME_STATE (NO_TRICK_AT_SUN, 1)
+
+ ADD_GAME_STATE (SPATHI_STACK0, 2)
+ ADD_GAME_STATE (SPATHI_STACK1, 1)
+ ADD_GAME_STATE (SPATHI_STACK2, 1)
+
+ ADD_GAME_STATE (ORZ_STACK0, 1)
+ ADD_GAME_STATE (ORZ_STACK1, 1)
+
+/* These state bits are actually offsets into defgrp.dat. They really
+ * shouldn't be part of the serialized Game State array! --MCM */
+ ADD_GAME_STATE (SHOFIXTI_GRPOFFS0, 8)
+ ADD_GAME_STATE (SHOFIXTI_GRPOFFS1, 8)
+ ADD_GAME_STATE (SHOFIXTI_GRPOFFS2, 8)
+ ADD_GAME_STATE (SHOFIXTI_GRPOFFS3, 8)
+
+ ADD_GAME_STATE (ZOQFOT_GRPOFFS0, 8)
+ ADD_GAME_STATE (ZOQFOT_GRPOFFS1, 8)
+ ADD_GAME_STATE (ZOQFOT_GRPOFFS2, 8)
+ ADD_GAME_STATE (ZOQFOT_GRPOFFS3, 8)
+
+ ADD_GAME_STATE (MELNORME0_GRPOFFS0, 8)
+ ADD_GAME_STATE (MELNORME0_GRPOFFS1, 8)
+ ADD_GAME_STATE (MELNORME0_GRPOFFS2, 8)
+ ADD_GAME_STATE (MELNORME0_GRPOFFS3, 8)
+
+ ADD_GAME_STATE (MELNORME1_GRPOFFS0, 8)
+ ADD_GAME_STATE (MELNORME1_GRPOFFS1, 8)
+ ADD_GAME_STATE (MELNORME1_GRPOFFS2, 8)
+ ADD_GAME_STATE (MELNORME1_GRPOFFS3, 8)
+
+ ADD_GAME_STATE (MELNORME2_GRPOFFS0, 8)
+ ADD_GAME_STATE (MELNORME2_GRPOFFS1, 8)
+ ADD_GAME_STATE (MELNORME2_GRPOFFS2, 8)
+ ADD_GAME_STATE (MELNORME2_GRPOFFS3, 8)
+
+ ADD_GAME_STATE (MELNORME3_GRPOFFS0, 8)
+ ADD_GAME_STATE (MELNORME3_GRPOFFS1, 8)
+ ADD_GAME_STATE (MELNORME3_GRPOFFS2, 8)
+ ADD_GAME_STATE (MELNORME3_GRPOFFS3, 8)
+
+ ADD_GAME_STATE (MELNORME4_GRPOFFS0, 8)
+ ADD_GAME_STATE (MELNORME4_GRPOFFS1, 8)
+ ADD_GAME_STATE (MELNORME4_GRPOFFS2, 8)
+ ADD_GAME_STATE (MELNORME4_GRPOFFS3, 8)
+
+ ADD_GAME_STATE (MELNORME5_GRPOFFS0, 8)
+ ADD_GAME_STATE (MELNORME5_GRPOFFS1, 8)
+ ADD_GAME_STATE (MELNORME5_GRPOFFS2, 8)
+ ADD_GAME_STATE (MELNORME5_GRPOFFS3, 8)
+
+ ADD_GAME_STATE (MELNORME6_GRPOFFS0, 8)
+ ADD_GAME_STATE (MELNORME6_GRPOFFS1, 8)
+ ADD_GAME_STATE (MELNORME6_GRPOFFS2, 8)
+ ADD_GAME_STATE (MELNORME6_GRPOFFS3, 8)
+
+ ADD_GAME_STATE (MELNORME7_GRPOFFS0, 8)
+ ADD_GAME_STATE (MELNORME7_GRPOFFS1, 8)
+ ADD_GAME_STATE (MELNORME7_GRPOFFS2, 8)
+ ADD_GAME_STATE (MELNORME7_GRPOFFS3, 8)
+
+ ADD_GAME_STATE (MELNORME8_GRPOFFS0, 8)
+ ADD_GAME_STATE (MELNORME8_GRPOFFS1, 8)
+ ADD_GAME_STATE (MELNORME8_GRPOFFS2, 8)
+ ADD_GAME_STATE (MELNORME8_GRPOFFS3, 8)
+
+ ADD_GAME_STATE (URQUAN_PROBE_GRPOFFS0, 8)
+ ADD_GAME_STATE (URQUAN_PROBE_GRPOFFS1, 8)
+ ADD_GAME_STATE (URQUAN_PROBE_GRPOFFS2, 8)
+ ADD_GAME_STATE (URQUAN_PROBE_GRPOFFS3, 8)
+
+ ADD_GAME_STATE (COLONY_GRPOFFS0, 8)
+ ADD_GAME_STATE (COLONY_GRPOFFS1, 8)
+ ADD_GAME_STATE (COLONY_GRPOFFS2, 8)
+ ADD_GAME_STATE (COLONY_GRPOFFS3, 8)
+
+ ADD_GAME_STATE (SAMATRA_GRPOFFS0, 8)
+ ADD_GAME_STATE (SAMATRA_GRPOFFS1, 8)
+ ADD_GAME_STATE (SAMATRA_GRPOFFS2, 8)
+ ADD_GAME_STATE (SAMATRA_GRPOFFS3, 8)
+
+END_GAME_STATE
+
+// Values for GAME_STATE.glob_flags:
+#define COMBAT_SPEED_SHIFT 6
+#define COMBAT_SPEED_MASK (((1 << 2) - 1) << COMBAT_SPEED_SHIFT)
+#define NUM_COMBAT_SPEEDS 4
+#define MUSIC_DISABLED (1 << 3)
+#define SOUND_DISABLED (1 << 4)
+#define CYBORG_ENABLED (1 << 5)
+
+enum
+{
+ SUPER_MELEE = 0, /* Is also used while in the main menu */
+ IN_LAST_BATTLE,
+ IN_ENCOUNTER,
+ IN_HYPERSPACE /* in HyperSpace or QuasiSpace */,
+ IN_INTERPLANETARY,
+ WON_LAST_BATTLE,
+
+ /* The following three are only used when displaying save game
+ * summaries */
+ IN_QUASISPACE,
+ IN_PLANET_ORBIT,
+ IN_STARBASE,
+
+ CHECK_PAUSE = MAKE_WORD (0, (1 << 0)),
+ IN_BATTLE = MAKE_WORD (0, (1 << 1)),
+ /* Is also set while in HyperSpace/QuasiSpace */
+ START_ENCOUNTER = MAKE_WORD (0, (1 << 2)),
+ START_INTERPLANETARY = MAKE_WORD (0, (1 << 3)),
+ CHECK_LOAD = MAKE_WORD (0, (1 << 4)),
+ CHECK_RESTART = MAKE_WORD (0, (1 << 5)),
+ CHECK_ABORT = MAKE_WORD (0, (1 << 6)),
+};
+typedef UWORD ACTIVITY;
+
+typedef struct
+{
+ BYTE glob_flags;
+ // See above for the meaning of the bits.
+
+ BYTE CrewCost, FuelCost;
+ BYTE ModuleCost[NUM_MODULES];
+ BYTE ElementWorth[NUM_ELEMENT_CATEGORIES];
+
+ PRIMITIVE *DisplayArray;
+ ACTIVITY CurrentActivity;
+
+ CLOCK_STATE GameClock;
+
+ POINT autopilot;
+ POINT ip_location;
+ STAMP ShipStamp;
+ UWORD ShipFacing;
+ BYTE ip_planet;
+ BYTE in_orbit;
+ VELOCITY_DESC velocity;
+
+ DWORD BattleGroupRef;
+ QUEUE avail_race_q;
+ /* List of all the races in the game with information
+ * about their ships, and what player knows about their
+ * fleet, center of SoI, status, etc.
+ * queue element is FLEET_INFO */
+ QUEUE npc_built_ship_q;
+ /* Non-player-character list of ships (during encounter)
+ * queue element is SHIP_FRAGMENT */
+ QUEUE ip_group_q;
+ /* List of groups present in solarsys (during IP);
+ * queue element is IP_GROUP */
+ QUEUE encounter_q;
+ /* List of HyperSpace encounters (black globes);
+ * queue element is ENCOUNTER */
+ QUEUE built_ship_q;
+ /* List of SIS escort ships;
+ * queue element is SHIP_FRAGMENT */
+
+ BYTE GameState[(NUM_GAME_STATE_BITS + 7) >> 3];
+} GAME_STATE;
+
+typedef struct
+{
+ SIS_STATE SIS_state;
+ GAME_STATE Game_state;
+} GLOBDATA;
+
+extern GLOBDATA GlobData;
+#define GLOBAL(f) GlobData.Game_state.f
+#define GLOBAL_SIS(f) GlobData.SIS_state.f
+
+#define MAX_ENCOUNTERS 16
+#define MAX_BATTLE_GROUPS 32
+
+/* DEFGRP enumeration. These identify scripted TrueSpace encounters
+ * more consistently than offsets into the DEFGRPINFO_FILE state
+ * file. */
+enum {
+ DEFGRP_NONE,
+ DEFGRP_SHOFIXTI,
+ DEFGRP_ZOQFOT,
+ DEFGRP_MELNORME0,
+ DEFGRP_MELNORME1,
+ DEFGRP_MELNORME2,
+ DEFGRP_MELNORME3,
+ DEFGRP_MELNORME4,
+ DEFGRP_MELNORME5,
+ DEFGRP_MELNORME6,
+ DEFGRP_MELNORME7,
+ DEFGRP_MELNORME8,
+ DEFGRP_URQUAN_PROBE,
+ DEFGRP_COLONY,
+ DEFGRP_SAMATRA,
+ NUM_DEFGRPS
+};
+
+//#define STATE_DEBUG
+
+extern BYTE getGameState (BYTE *state, int startBit, int endBit);
+extern void setGameState (BYTE *state, int startBit, int endBit, BYTE val
+#ifdef STATE_DEBUG
+ , const char *name
+#endif
+ );
+extern void copyGameState (BYTE *dest, DWORD target, BYTE *src, DWORD begin, DWORD end);
+
+#define GET_GAME_STATE(SName) getGameState (GLOBAL(GameState), (SName), (END_##SName))
+#ifdef STATE_DEBUG
+# define SET_GAME_STATE(SName, val) \
+ setGameState (GLOBAL(GameState), (SName), (END_##SName), (val), #SName)
+#else
+# define SET_GAME_STATE(SName, val) \
+ setGameState (GLOBAL(GameState), (SName), (END_##SName), (val))
+#endif
+
+extern DWORD getGameState32 (BYTE *state, int startBit);
+extern void setGameState32 (BYTE *state, int startBit, DWORD val
+#ifdef STATE_DEBUG
+ , const char *name
+#endif
+ );
+
+#define GET_GAME_STATE_32(SName) getGameState32 (GLOBAL(GameState), (SName))
+#ifdef STATE_DEBUG
+# define SET_GAME_STATE_32(SName, val) \
+ setGameState32 (GLOBAL(GameState), (SName), (val), #SName)
+#else
+# define SET_GAME_STATE_32(SName, val) \
+ setGameState32 (GLOBAL(GameState), (SName), (val))
+#endif
+
+
+extern CONTEXT RadarContext;
+
+extern void FreeSC2Data (void);
+extern BOOLEAN LoadSC2Data (void);
+
+extern void InitGlobData (void);
+
+BOOLEAN inFullGame (void);
+BOOLEAN inSuperMelee (void);
+//BOOLEAN inBattle (void);
+//BOOLEAN inInterPlanetary (void);
+//BOOLEAN inSolarSystem (void);
+//BOOLEAN inOrbit (void);
+BOOLEAN inHQSpace (void);
+BOOLEAN inHyperSpace (void);
+BOOLEAN inQuasiSpace (void);
+
+extern BOOLEAN InitGameStructures (void);
+extern void UninitGameStructures (void);
+
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* UQM_GLOBDATA_H_ */