1 //Copyright Paul Reiche, Fred Ford. 1992-2002 2 3 /* 4 * This program is free software; you can redistribute it and/or modify 5 * it under the terms of the GNU General Public License as published by 6 * the Free Software Foundation; either version 2 of the License, or 7 * (at your option) any later version. 8 * 9 * This program is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 * GNU General Public License for more details. 13 * 14 * You should have received a copy of the GNU General Public License 15 * along with this program; if not, write to the Free Software 16 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17 */ 18 19 #ifndef UQM_GLOBDATA_H_ 20 #define UQM_GLOBDATA_H_ 21 22 #include "clock.h" 23 #include "libs/gfxlib.h" 24 #include "libs/reslib.h" 25 #include "libs/sndlib.h" 26 #include "sis.h" 27 #include "velocity.h" 28 #include "commanim.h" 29 30 #if defined(__cplusplus) 31 extern "C" { 32 #endif 33 34 35 // general numbers-speech generator info 36 // should accomodate most common base-10 languages 37 // many languages require various plural forms 38 // for digit names like "hundred" 39 // possibly needs reworking for others 40 typedef struct 41 { 42 // an array of these structs must be in ascending remainder order 43 // terminate the array with Divider == 0 44 45 // digit divider, i.e. 1, 10, 100, etc. 46 int Divider; 47 // maximum remainder for this name 48 // name will be used if Number % Divider <= MaxRemainder 49 int MaxRemainder; 50 // string table index for this name 51 // i.e. "hundred" in English 52 COUNT StrIndex; 53 } SPEECH_DIGITNAME; 54 55 typedef struct 56 { 57 // digit divider, i.e. 1, 10, 100, etc. 58 int Divider; 59 // digit sub, i.e. 10 for teens 60 // subtracted from the value to get an index into StrDigits 61 int Subtrahend; 62 // ptr to 10 indices for this digit 63 // index is string table ptr when > 0 64 // is invalid (should not happen) or 65 // is a a 'skip digit' indicator when == 0 66 // StrDigits can be NULL, in which case 67 // the value is interpreted recursively 68 COUNT *StrDigits; 69 // digit Names, can be NULL, in which case 70 // CommonNameIndex is used 71 SPEECH_DIGITNAME *Names; 72 // common digit name string table index 73 // i.e. "hundred" in English 74 COUNT CommonNameIndex; 75 } SPEECH_DIGIT; 76 77 // this accomodates up to "billions" in english 78 #define MAX_SPEECH_DIGITS 7 79 80 typedef struct 81 { 82 // slots used in Digits array 83 COUNT NumDigits; 84 // slots for each digit in numbers 85 // teens is exception 86 // 0-9, 10-19, ..20-90, ..100-900, etc. 87 SPEECH_DIGIT Digits[MAX_SPEECH_DIGITS]; 88 } NUMBER_SPEECH_DESC; 89 typedef const NUMBER_SPEECH_DESC *NUMBER_SPEECH; 90 91 typedef DWORD LDAS_FLAGS; 92 #define LDASF_NONE ((LDAS_FLAGS) 0 ) 93 #define LDASF_USE_ALTERNATE ((LDAS_FLAGS)(1 << 0)) 94 95 typedef struct 96 { 97 void (*init_encounter_func) (void); 98 /* Called when entering communications */ 99 void (*post_encounter_func) (void); 100 /* Called when leaving communications or combat normally */ 101 COUNT (*uninit_encounter_func) (void); 102 /* Called when encounter is done for cleanup */ 103 104 RESOURCE AlienFrameRes; 105 RESOURCE AlienFontRes; 106 Color AlienTextFColor, AlienTextBColor; 107 POINT AlienTextBaseline; 108 COUNT AlienTextWidth; 109 TEXT_ALIGN AlienTextAlign; 110 TEXT_VALIGN AlienTextValign; 111 RESOURCE AlienColorMapRes; 112 RESOURCE AlienSongRes; 113 RESOURCE AlienAltSongRes; 114 LDAS_FLAGS AlienSongFlags; 115 116 RESOURCE ConversationPhrasesRes; 117 118 COUNT NumAnimations; 119 ANIMATION_DESC AlienAmbientArray[MAX_ANIMATIONS]; 120 121 // Transition animation to/from talking state; 122 // the first frame is neutral (sort of like YOYO_ANIM) 123 ANIMATION_DESC AlienTransitionDesc; 124 // Talking animation, like RANDOM_ANIM, except random frames 125 // always alternate with a neutral frame; 126 // the first frame is neutral 127 ANIMATION_DESC AlienTalkDesc; 128 129 NUMBER_SPEECH AlienNumberSpeech; 130 131 FRAME AlienFrame; 132 FONT AlienFont; 133 COLORMAP AlienColorMap; 134 MUSIC_REF AlienSong; 135 STRING ConversationPhrases; 136 137 } LOCDATA; 138 139 enum 140 { 141 PORTAL_SPAWNER_DEVICE = 0, 142 TALKING_PET_DEVICE, 143 UTWIG_BOMB_DEVICE, 144 SUN_EFFICIENCY_DEVICE, 145 ROSY_SPHERE_DEVICE, 146 AQUA_HELIX_DEVICE, 147 CLEAR_SPINDLE_DEVICE, 148 ULTRON_0_DEVICE, 149 ULTRON_1_DEVICE, 150 ULTRON_2_DEVICE, 151 ULTRON_3_DEVICE, 152 MAIDENS_DEVICE, 153 UMGAH_HYPERWAVE_DEVICE, 154 BURVIX_HYPERWAVE_DEVICE, 155 DATA_PLATE_1_DEVICE, 156 DATA_PLATE_2_DEVICE, 157 DATA_PLATE_3_DEVICE, 158 TAALO_PROTECTOR_DEVICE, 159 EGG_CASING0_DEVICE, 160 EGG_CASING1_DEVICE, 161 EGG_CASING2_DEVICE, 162 SYREEN_SHUTTLE_DEVICE, 163 VUX_BEAST_DEVICE, 164 DESTRUCT_CODE_DEVICE, 165 URQUAN_WARP_DEVICE, 166 ARTIFACT_2_DEVICE, 167 ARTIFACT_3_DEVICE, 168 LUNAR_BASE_DEVICE, 169 170 NUM_DEVICES 171 }; 172 173 #define YEARS_TO_KOHRAH_VICTORY 4 174 175 #define START_GAME_STATE enum { 176 #define ADD_GAME_STATE(SName,NumBits) SName, END_##SName = SName + NumBits - 1, 177 #define END_GAME_STATE NUM_GAME_STATE_BITS }; 178 179 START_GAME_STATE 180 /* Shofixti states */ 181 ADD_GAME_STATE (SHOFIXTI_VISITS, 3) 182 ADD_GAME_STATE (SHOFIXTI_STACK1, 2) 183 ADD_GAME_STATE (SHOFIXTI_STACK2, 3) 184 ADD_GAME_STATE (SHOFIXTI_STACK3, 2) 185 ADD_GAME_STATE (SHOFIXTI_KIA, 1) 186 ADD_GAME_STATE (SHOFIXTI_BRO_KIA, 1) 187 ADD_GAME_STATE (SHOFIXTI_RECRUITED, 1) 188 189 ADD_GAME_STATE (SHOFIXTI_MAIDENS, 1) /* Did you find the babes yet? */ 190 ADD_GAME_STATE (MAIDENS_ON_SHIP, 1) 191 ADD_GAME_STATE (BATTLE_SEGUE, 1) 192 /* Set to 0 in init_xxx_comm() if communications directly 193 * follows an encounter. 194 * Set to 1 in init_xxx_comm() if the player gets to decide 195 * whether to attack or talk. 196 * Set to 1 in communication when battle follows the 197 * communication. It is still valid when uninit_xxx_comm() gets 198 * called after combat or communication. 199 */ 200 ADD_GAME_STATE (PLANETARY_LANDING, 1) 201 ADD_GAME_STATE (PLANETARY_CHANGE, 1) 202 /* Flag set to 1 when the planet information for the current 203 * world is changed since it was last saved to the starinfo.dat 204 * file. Set when picking up bio, mineral, or energy nodes. 205 * When there's no current world, it should be 0. 206 */ 207 208 /* Spathi states */ 209 ADD_GAME_STATE (SPATHI_VISITS, 3) 210 ADD_GAME_STATE (SPATHI_HOME_VISITS, 3) 211 ADD_GAME_STATE (FOUND_PLUTO_SPATHI, 2) 212 /* 0 - Haven't met Fwiffo. 213 * 1 - Met Fwiffo on Pluto, now talking to him. 214 * 2 - Met Fwiffo on Pluto, after dialog. 215 * 3 - Met Fwiffo, and have reported to the Safe Ones on 216 * the Spathi moon that he was either killed, or that 217 * you have him on board. 218 */ 219 ADD_GAME_STATE (SPATHI_SHIELDED_SELVES, 1) 220 ADD_GAME_STATE (SPATHI_CREATURES_EXAMINED, 1) 221 ADD_GAME_STATE (SPATHI_CREATURES_ELIMINATED, 1) 222 ADD_GAME_STATE (UMGAH_BROADCASTERS, 1) 223 ADD_GAME_STATE (SPATHI_MANNER, 2) 224 ADD_GAME_STATE (SPATHI_QUEST, 1) 225 ADD_GAME_STATE (LIED_ABOUT_CREATURES, 2) 226 ADD_GAME_STATE (SPATHI_PARTY, 1) 227 ADD_GAME_STATE (KNOW_SPATHI_PASSWORD, 1) 228 229 ADD_GAME_STATE (ILWRATH_HOME_VISITS, 3) 230 ADD_GAME_STATE (ILWRATH_CHMMR_VISITS, 1) 231 232 ADD_GAME_STATE (ARILOU_SPACE, 1) 233 /* 0 if the periodically opening QuasiSpace portal is 234 * closed or closing. 235 * 1 if the periodically opening QuasiSpace portal is 236 * open or opening. 237 */ 238 ADD_GAME_STATE (ARILOU_SPACE_SIDE, 2) 239 /* 0 if in HyperSpace and not just emerged from the periodically 240 * opening QuasiSpace portal. 241 * 1 if in HyperSpace and just emerged from the periodically 242 * QuasiSpace portal (still on the portal). 243 * 2 if in QuasiSpace and just emerged from the periodically 244 * opening portal (still on the portal). 245 * 3 if in QuasiSpace and not just emerged from the 246 * periodically opening portal. 247 */ 248 ADD_GAME_STATE (ARILOU_SPACE_COUNTER, 4) 249 /* Keeps track of how far the periodically opening QuasiSpace 250 * portal is open. (This determines the image) 251 * 0 <= ARILOU_SPACE_COUNTER <= 9 252 * 0 means totally closed. 253 * 9 means completely open. 254 */ 255 256 ADD_GAME_STATE (LANDER_SHIELDS, 4) 257 258 ADD_GAME_STATE (MET_MELNORME, 1) 259 ADD_GAME_STATE (MELNORME_RESCUE_REFUSED, 1) 260 ADD_GAME_STATE (MELNORME_RESCUE_COUNT, 3) 261 ADD_GAME_STATE (TRADED_WITH_MELNORME, 1) 262 ADD_GAME_STATE (WHY_MELNORME_PURPLE, 1) 263 ADD_GAME_STATE (MELNORME_CREDIT0, 8) 264 ADD_GAME_STATE (MELNORME_CREDIT1, 8) 265 ADD_GAME_STATE (MELNORME_BUSINESS_COUNT, 2) 266 ADD_GAME_STATE (MELNORME_YACK_STACK0, 2) 267 ADD_GAME_STATE (MELNORME_YACK_STACK1, 2) 268 ADD_GAME_STATE (MELNORME_YACK_STACK2, 4) 269 ADD_GAME_STATE (MELNORME_YACK_STACK3, 3) 270 ADD_GAME_STATE (MELNORME_YACK_STACK4, 2) 271 ADD_GAME_STATE (WHY_MELNORME_BLUE, 1) 272 ADD_GAME_STATE (MELNORME_ANGER, 2) 273 ADD_GAME_STATE (MELNORME_MIFFED_COUNT, 2) 274 ADD_GAME_STATE (MELNORME_PISSED_COUNT, 2) 275 ADD_GAME_STATE (MELNORME_HATE_COUNT, 2) 276 277 ADD_GAME_STATE (PROBE_MESSAGE_DELIVERED, 1) 278 ADD_GAME_STATE (PROBE_ILWRATH_ENCOUNTER, 1) 279 280 ADD_GAME_STATE (STARBASE_AVAILABLE, 1) 281 ADD_GAME_STATE (STARBASE_VISITED, 1) 282 ADD_GAME_STATE (RADIOACTIVES_PROVIDED, 1) 283 ADD_GAME_STATE (LANDERS_LOST, 1) 284 ADD_GAME_STATE (GIVEN_FUEL_BEFORE, 1) 285 286 ADD_GAME_STATE (AWARE_OF_SAMATRA, 1) 287 ADD_GAME_STATE (YEHAT_CAVALRY_ARRIVED, 1) 288 ADD_GAME_STATE (URQUAN_MESSED_UP, 1) 289 290 ADD_GAME_STATE (MOONBASE_DESTROYED, 1) 291 ADD_GAME_STATE (WILL_DESTROY_BASE, 1) 292 293 ADD_GAME_STATE (ARTIFACT_2_ON_SHIP, 1) 294 ADD_GAME_STATE (ARTIFACT_3_ON_SHIP, 1) 295 296 ADD_GAME_STATE (KOHR_AH_KILLED_ALL, 1) 297 298 ADD_GAME_STATE (STARBASE_YACK_STACK1, 1) 299 300 ADD_GAME_STATE (DISCUSSED_PORTAL_SPAWNER, 1) 301 ADD_GAME_STATE (DISCUSSED_TALKING_PET, 1) 302 ADD_GAME_STATE (DISCUSSED_UTWIG_BOMB, 1) 303 ADD_GAME_STATE (DISCUSSED_SUN_EFFICIENCY, 1) 304 ADD_GAME_STATE (DISCUSSED_ROSY_SPHERE, 1) 305 ADD_GAME_STATE (DISCUSSED_AQUA_HELIX, 1) 306 ADD_GAME_STATE (DISCUSSED_CLEAR_SPINDLE, 1) 307 ADD_GAME_STATE (DISCUSSED_ULTRON, 1) 308 ADD_GAME_STATE (DISCUSSED_MAIDENS, 1) 309 ADD_GAME_STATE (DISCUSSED_UMGAH_HYPERWAVE, 1) 310 ADD_GAME_STATE (DISCUSSED_BURVIX_HYPERWAVE, 1) 311 ADD_GAME_STATE (SYREEN_WANT_PROOF, 1) 312 ADD_GAME_STATE (PLAYER_HAVING_SEX, 1) 313 ADD_GAME_STATE (MET_ARILOU, 1) 314 ADD_GAME_STATE (DISCUSSED_TAALO_PROTECTOR, 1) 315 ADD_GAME_STATE (DISCUSSED_EGG_CASING0, 1) 316 ADD_GAME_STATE (DISCUSSED_EGG_CASING1, 1) 317 ADD_GAME_STATE (DISCUSSED_EGG_CASING2, 1) 318 ADD_GAME_STATE (DISCUSSED_SYREEN_SHUTTLE, 1) 319 ADD_GAME_STATE (DISCUSSED_VUX_BEAST, 1) 320 ADD_GAME_STATE (DISCUSSED_DESTRUCT_CODE, 1) 321 ADD_GAME_STATE (DISCUSSED_URQUAN_WARP, 1) 322 ADD_GAME_STATE (DISCUSSED_ARTIFACT_2, 1) 323 ADD_GAME_STATE (DISCUSSED_ARTIFACT_3, 1) 324 325 ADD_GAME_STATE (ATTACKED_DRUUGE, 1) 326 327 ADD_GAME_STATE (NEW_ALLIANCE_NAME, 2) 328 329 ADD_GAME_STATE (PORTAL_COUNTER, 4) 330 /* Set to 1 when the player opens a QuasiSpace portal. 331 * It will then be increased to 10, at which time 332 * the portal is completely open. (This determines the image). 333 */ 334 335 ADD_GAME_STATE (BURVIXESE_BROADCASTERS, 1) 336 ADD_GAME_STATE (BURV_BROADCASTERS_ON_SHIP, 1) 337 338 ADD_GAME_STATE (UTWIG_BOMB, 1) 339 ADD_GAME_STATE (UTWIG_BOMB_ON_SHIP, 1) 340 341 ADD_GAME_STATE (AQUA_HELIX, 1) 342 ADD_GAME_STATE (AQUA_HELIX_ON_SHIP, 1) 343 344 ADD_GAME_STATE (SUN_DEVICE, 1) 345 ADD_GAME_STATE (SUN_DEVICE_ON_SHIP, 1) 346 347 ADD_GAME_STATE (TAALO_PROTECTOR, 1) 348 ADD_GAME_STATE (TAALO_PROTECTOR_ON_SHIP, 1) 349 350 ADD_GAME_STATE (SHIP_VAULT_UNLOCKED, 1) 351 ADD_GAME_STATE (SYREEN_SHUTTLE, 1) 352 353 ADD_GAME_STATE (PORTAL_KEY, 1) 354 ADD_GAME_STATE (PORTAL_KEY_ON_SHIP, 1) 355 356 ADD_GAME_STATE (VUX_BEAST, 1) 357 ADD_GAME_STATE (VUX_BEAST_ON_SHIP, 1) 358 359 ADD_GAME_STATE (TALKING_PET, 1) 360 ADD_GAME_STATE (TALKING_PET_ON_SHIP, 1) 361 362 ADD_GAME_STATE (MOONBASE_ON_SHIP, 1) 363 364 ADD_GAME_STATE (KOHR_AH_FRENZY, 1) 365 ADD_GAME_STATE (KOHR_AH_VISITS, 2) 366 ADD_GAME_STATE (KOHR_AH_BYES, 1) 367 368 ADD_GAME_STATE (SLYLANDRO_HOME_VISITS, 3) 369 ADD_GAME_STATE (DESTRUCT_CODE_ON_SHIP, 1) 370 371 ADD_GAME_STATE (ILWRATH_VISITS, 3) 372 ADD_GAME_STATE (ILWRATH_DECEIVED, 1) 373 ADD_GAME_STATE (FLAGSHIP_CLOAKED, 1) 374 375 ADD_GAME_STATE (MYCON_VISITS, 3) 376 ADD_GAME_STATE (MYCON_HOME_VISITS, 3) 377 ADD_GAME_STATE (MYCON_AMBUSH, 1) 378 ADD_GAME_STATE (MYCON_FELL_FOR_AMBUSH, 1) 379 /* Set to 1 when the Mycon have been told about Organon 380 * and are moving towards it. 381 */ 382 383 ADD_GAME_STATE (GLOBAL_FLAGS_AND_DATA, 8) 384 /* This state seems to be used to distinguish between different 385 * places where one may have an conversation with an alien. 386 * Like home world, other world, space. 387 * Why this needs 8 bits I don't know. Only specific 388 * combinations of bits seem to be used (0, 1, or all bits). 389 * A closer investigation is desirable. - SvdB 390 * Bit 4 is set when initiating communication with the Ilwrath 391 * homeworld by means of a HyperWave Broadcaster. 392 * Bit 5 is set when initiating communication with an Ilwrath 393 * ship by means of a HyperWave Broadcaster. 394 * All bits are cleared when communication is over. 395 */ 396 397 ADD_GAME_STATE (ORZ_VISITS, 3) 398 ADD_GAME_STATE (TAALO_VISITS, 3) 399 ADD_GAME_STATE (ORZ_MANNER, 2) 400 401 ADD_GAME_STATE (PROBE_EXHIBITED_BUG, 1) 402 ADD_GAME_STATE (CLEAR_SPINDLE_ON_SHIP, 1) 403 404 ADD_GAME_STATE (URQUAN_VISITS, 3) 405 ADD_GAME_STATE (PLAYER_HYPNOTIZED, 1) 406 407 ADD_GAME_STATE (VUX_VISITS, 3) 408 ADD_GAME_STATE (VUX_HOME_VISITS, 3) 409 ADD_GAME_STATE (ZEX_VISITS, 3) 410 ADD_GAME_STATE (ZEX_IS_DEAD, 1) 411 ADD_GAME_STATE (KNOW_ZEX_WANTS_MONSTER, 1) 412 413 ADD_GAME_STATE (UTWIG_VISITS, 3) 414 ADD_GAME_STATE (UTWIG_HOME_VISITS, 3) 415 ADD_GAME_STATE (BOMB_VISITS, 3) 416 ADD_GAME_STATE (ULTRON_CONDITION, 3) 417 /* 0 if the Supox still have the Ultron 418 * 1 if the Captain has the Ultron, completely broken 419 * 2 if the Captain has the Ultron, with 1 fix 420 * 3 if the Captain has the Ultron, with 2 fixes 421 * 4 if the Captain has the Ultron, completely restored 422 * 5 if the Ultron has been returned to the Utwig 423 */ 424 ADD_GAME_STATE (UTWIG_HAVE_ULTRON, 1) 425 ADD_GAME_STATE (BOMB_UNPROTECTED, 1) 426 427 ADD_GAME_STATE (TAALO_UNPROTECTED, 1) 428 429 ADD_GAME_STATE (TALKING_PET_VISITS, 3) 430 ADD_GAME_STATE (TALKING_PET_HOME_VISITS, 3) 431 ADD_GAME_STATE (UMGAH_ZOMBIE_BLOBBIES, 1) 432 /* The Umgah have come under the influence of the Talking Pet */ 433 ADD_GAME_STATE (KNOW_UMGAH_ZOMBIES, 1) 434 /* The Captain is aware that something is up with the Umgah */ 435 436 ADD_GAME_STATE (ARILOU_VISITS, 3) 437 ADD_GAME_STATE (ARILOU_HOME_VISITS, 3) 438 ADD_GAME_STATE (KNOW_ARILOU_WANT_WRECK, 1) 439 ADD_GAME_STATE (ARILOU_CHECKED_UMGAH, 2) 440 ADD_GAME_STATE (PORTAL_SPAWNER, 1) 441 ADD_GAME_STATE (PORTAL_SPAWNER_ON_SHIP, 1) 442 443 ADD_GAME_STATE (UMGAH_VISITS, 3) 444 ADD_GAME_STATE (UMGAH_HOME_VISITS, 3) 445 ADD_GAME_STATE (MET_NORMAL_UMGAH, 1) 446 447 ADD_GAME_STATE (SYREEN_HOME_VISITS, 3) 448 ADD_GAME_STATE (SYREEN_SHUTTLE_ON_SHIP, 1) 449 ADD_GAME_STATE (KNOW_SYREEN_VAULT, 1) 450 451 ADD_GAME_STATE (EGG_CASE0_ON_SHIP, 1) 452 ADD_GAME_STATE (SUN_DEVICE_UNGUARDED, 1) 453 454 ADD_GAME_STATE (ROSY_SPHERE_ON_SHIP, 1) 455 /* The Rosy Sphere is aboard the flagship, i.e. It has been 456 * acquired from the Druuge, but not yet inserted in the broken 457 * Ultron. cf. ROSY_SPHERE */ 458 459 ADD_GAME_STATE (CHMMR_HOME_VISITS, 3) 460 ADD_GAME_STATE (CHMMR_EMERGING, 1) 461 ADD_GAME_STATE (CHMMR_UNLEASHED, 1) 462 ADD_GAME_STATE (CHMMR_BOMB_STATE, 2) 463 /* 0 - Nothing is known about the Precursor Bomb. 464 * 1 - The captain knows from the Chmmr that some extremely 465 * powerful weapon is needed to destroy the Sa-Matra. 466 * 2 - Installation of the precursor bomb has started. 467 * 3 - Left the starbase after installation of the Precursor bomb. 468 */ 469 470 ADD_GAME_STATE (DRUUGE_DISCLAIMER, 1) 471 472 ADD_GAME_STATE (YEHAT_VISITS, 3) 473 ADD_GAME_STATE (YEHAT_REBEL_VISITS, 3) 474 ADD_GAME_STATE (YEHAT_HOME_VISITS, 3) 475 ADD_GAME_STATE (YEHAT_CIVIL_WAR, 1) 476 ADD_GAME_STATE (YEHAT_ABSORBED_PKUNK, 1) 477 ADD_GAME_STATE (YEHAT_SHIP_MONTH, 4) 478 ADD_GAME_STATE (YEHAT_SHIP_DAY, 5) 479 ADD_GAME_STATE (YEHAT_SHIP_YEAR, 5) 480 481 ADD_GAME_STATE (CLEAR_SPINDLE, 1) 482 ADD_GAME_STATE (PKUNK_VISITS, 3) 483 ADD_GAME_STATE (PKUNK_HOME_VISITS, 3) 484 ADD_GAME_STATE (PKUNK_SHIP_MONTH, 4) 485 /* The month in PKUNK_SHIP_YEAR that new ships are available 486 * from the Pkunk. */ 487 ADD_GAME_STATE (PKUNK_SHIP_DAY, 5) 488 /* The day of the month in PKUNK_SHIP_MONTH in PKUNK_SHIP_YEAR 489 * that new ships are available. */ 490 ADD_GAME_STATE (PKUNK_SHIP_YEAR, 5) 491 /* The year that new ships are available from the Pkunk 492 * (stored as an offset from the year the game starts). */ 493 ADD_GAME_STATE (PKUNK_MISSION, 3) 494 495 ADD_GAME_STATE (SUPOX_VISITS, 3) 496 ADD_GAME_STATE (SUPOX_HOME_VISITS, 3) 497 498 ADD_GAME_STATE (THRADD_VISITS, 3) 499 ADD_GAME_STATE (THRADD_HOME_VISITS, 3) 500 ADD_GAME_STATE (HELIX_VISITS, 3) 501 ADD_GAME_STATE (HELIX_UNPROTECTED, 1) 502 ADD_GAME_STATE (THRADD_CULTURE, 2) 503 ADD_GAME_STATE (THRADD_MISSION, 3) 504 /* 0 if the Thraddash fleet hasn't left the Thraddash home world. 505 * 1 if the Thraddash are heading towards Kohr-Ah territory. 506 * 2 if the Thraddash are fighting the Kohr-Ah. 507 * 3 if the Thraddash are returning from Kohr-Ah territory. 508 * 4 if the Thraddash fleet is back at the Thraddash home world. 509 */ 510 511 ADD_GAME_STATE (DRUUGE_VISITS, 3) 512 ADD_GAME_STATE (DRUUGE_HOME_VISITS, 3) 513 ADD_GAME_STATE (ROSY_SPHERE, 1) 514 /* The play has or has had the Rosy Sphere. 515 * cf. ROSY_SHERE_ON_SHIP */ 516 ADD_GAME_STATE (SCANNED_MAIDENS, 1) 517 ADD_GAME_STATE (SCANNED_FRAGMENTS, 1) 518 ADD_GAME_STATE (SCANNED_CASTER, 1) 519 ADD_GAME_STATE (SCANNED_SPAWNER, 1) 520 ADD_GAME_STATE (SCANNED_ULTRON, 1) 521 522 ADD_GAME_STATE (ZOQFOT_INFO, 2) 523 ADD_GAME_STATE (ZOQFOT_HOSTILE, 1) 524 ADD_GAME_STATE (ZOQFOT_HOME_VISITS, 3) 525 ADD_GAME_STATE (MET_ZOQFOT, 1) 526 ADD_GAME_STATE (ZOQFOT_DISTRESS, 2) 527 /* 0 if the Zoq-Fot-Pik aren't in distress 528 * 1 if the Zoq-Fot-Pik are under attack by the Kohr-Ah 529 * 2 if the Zoq-Fot-Pik have been destroyed because of this 530 * attack (not by the Kohr-Ah final victory cleansing) 531 */ 532 533 ADD_GAME_STATE (EGG_CASE1_ON_SHIP, 1) 534 ADD_GAME_STATE (EGG_CASE2_ON_SHIP, 1) 535 ADD_GAME_STATE (MYCON_SUN_VISITS, 3) 536 ADD_GAME_STATE (ORZ_HOME_VISITS, 3) 537 538 ADD_GAME_STATE (MELNORME_FUEL_PROCEDURE, 1) 539 ADD_GAME_STATE (MELNORME_TECH_PROCEDURE, 1) 540 ADD_GAME_STATE (MELNORME_INFO_PROCEDURE, 1) 541 542 ADD_GAME_STATE (MELNORME_TECH_STACK, 4) 543 /* MELNORME_TECH_STACK is now unused */ 544 ADD_GAME_STATE (MELNORME_EVENTS_INFO_STACK, 5) 545 ADD_GAME_STATE (MELNORME_ALIEN_INFO_STACK, 5) 546 ADD_GAME_STATE (MELNORME_HISTORY_INFO_STACK, 5) 547 548 ADD_GAME_STATE (RAINBOW_WORLD0, 8) 549 /* Low byte of a bit array, one bit per rainbow world. 550 * Each bit is set if the rainbow world has been visited. 551 * The lowest bit is for the first star in the star_array 552 * with RAINBOW_DEFINED, and so on. 553 */ 554 ADD_GAME_STATE (RAINBOW_WORLD1, 2) 555 /* High 2 bits of the bit array of which RAINBOW_WORLD0 556 * is the low byte. 557 */ 558 ADD_GAME_STATE (MELNORME_RAINBOW_COUNT, 4) 559 /* The number of rainbow world locations sold to the Melnorme. */ 560 561 ADD_GAME_STATE (USED_BROADCASTER, 1) 562 ADD_GAME_STATE (BROADCASTER_RESPONSE, 1) 563 564 ADD_GAME_STATE (IMPROVED_LANDER_SPEED, 1) 565 ADD_GAME_STATE (IMPROVED_LANDER_CARGO, 1) 566 ADD_GAME_STATE (IMPROVED_LANDER_SHOT, 1) 567 568 ADD_GAME_STATE (MET_ORZ_BEFORE, 1) 569 ADD_GAME_STATE (YEHAT_REBEL_TOLD_PKUNK, 1) 570 ADD_GAME_STATE (PLAYER_HAD_SEX, 1) 571 ADD_GAME_STATE (UMGAH_BROADCASTERS_ON_SHIP, 1) 572 573 ADD_GAME_STATE (LIGHT_MINERAL_LOAD, 3) 574 ADD_GAME_STATE (MEDIUM_MINERAL_LOAD, 3) 575 ADD_GAME_STATE (HEAVY_MINERAL_LOAD, 3) 576 577 ADD_GAME_STATE (STARBASE_BULLETS0, 8) 578 ADD_GAME_STATE (STARBASE_BULLETS1, 8) 579 ADD_GAME_STATE (STARBASE_BULLETS2, 8) 580 ADD_GAME_STATE (STARBASE_BULLETS3, 8) 581 582 ADD_GAME_STATE (STARBASE_MONTH, 4) 583 ADD_GAME_STATE (STARBASE_DAY, 5) 584 585 ADD_GAME_STATE (CREW_SOLD_TO_DRUUGE0, 8) 586 ADD_GAME_STATE (CREW_PURCHASED0, 8) 587 ADD_GAME_STATE (CREW_PURCHASED1, 8) 588 589 ADD_GAME_STATE (URQUAN_PROTECTING_SAMATRA, 1) 590 591 #define THRADDASH_BODY_THRESHOLD 25 592 ADD_GAME_STATE (THRADDASH_BODY_COUNT, 5) 593 594 ADD_GAME_STATE (UTWIG_SUPOX_MISSION, 3) 595 /* 0 if the Utwig and Supox fleet haven't left their home world. 596 * 1 if the U&S are on their way towards the Kohr-Ah 597 * 2 if the U&S are fighting the Kohr-Ah (first 80 days) 598 * 3 does not occur 599 * 4 if the U&S are fighting the Kohr-Ah (second 80 days) 600 * 5 if the U&S are returning home. 601 * 6 if the U&S are back at their home world. 602 */ 603 ADD_GAME_STATE (SPATHI_INFO, 3) 604 605 ADD_GAME_STATE (ILWRATH_INFO, 2) 606 ADD_GAME_STATE (ILWRATH_GODS_SPOKEN, 4) 607 ADD_GAME_STATE (ILWRATH_WORSHIP, 2) 608 ADD_GAME_STATE (ILWRATH_FIGHT_THRADDASH, 1) 609 610 ADD_GAME_STATE (READY_TO_CONFUSE_URQUAN, 1) 611 ADD_GAME_STATE (URQUAN_HYPNO_VISITS, 1) 612 ADD_GAME_STATE (MENTIONED_PET_COMPULSION, 1) 613 ADD_GAME_STATE (URQUAN_INFO, 2) 614 ADD_GAME_STATE (KNOW_URQUAN_STORY, 2) 615 616 ADD_GAME_STATE (MYCON_INFO, 4) 617 ADD_GAME_STATE (MYCON_RAMBLE, 5) 618 ADD_GAME_STATE (KNOW_ABOUT_SHATTERED, 2) 619 /* 0 if the player doesn't known about shattered worlds 620 * 1 if the player has encountered a shattered world 621 * 2 if the player knows that shatterred worlds are caused 622 * by Mycon deep children. 623 * 3 if the player has told the Syreen that Mycon Deep Children 624 * cause shattered worlds. Proof doesn't have to be presented 625 * yet at this time. 626 */ 627 ADD_GAME_STATE (MYCON_INSULTS, 3) 628 ADD_GAME_STATE (MYCON_KNOW_AMBUSH, 1) 629 /* Set to 1 when the Mycon have been butchered at Organon, 630 * just before the remaining Mycon head back home. 631 */ 632 633 ADD_GAME_STATE (SYREEN_INFO, 2) 634 ADD_GAME_STATE (KNOW_SYREEN_WORLD_SHATTERED, 1) 635 ADD_GAME_STATE (SYREEN_KNOW_ABOUT_MYCON, 1) 636 637 ADD_GAME_STATE (TALKING_PET_INFO, 3) 638 ADD_GAME_STATE (TALKING_PET_SUGGESTIONS, 3) 639 ADD_GAME_STATE (LEARNED_TALKING_PET, 1) 640 ADD_GAME_STATE (DNYARRI_LIED, 1) 641 /* Set when the Talking Pet tells you his version of their 642 * race's history with the Ur-Quan. 643 * Cleared once you confront him about this lie. 644 */ 645 ADD_GAME_STATE (SHIP_TO_COMPEL, 1) 646 647 ADD_GAME_STATE (ORZ_GENERAL_INFO, 2) 648 ADD_GAME_STATE (ORZ_PERSONAL_INFO, 3) 649 ADD_GAME_STATE (ORZ_ANDRO_STATE, 2) 650 ADD_GAME_STATE (REFUSED_ORZ_ALLIANCE, 1) 651 652 ADD_GAME_STATE (PKUNK_MANNER, 2) 653 /* 0 not met the Pkunk 654 * 1 fought the Pkunk, but relations are still salvagable. 655 * 2 hostile relations with the Pkunk, no way back. 656 * 3 friendly relations with the Pkunk 657 */ 658 ADD_GAME_STATE (PKUNK_ON_THE_MOVE, 1) 659 ADD_GAME_STATE (PKUNK_FLEET, 2) 660 ADD_GAME_STATE (PKUNK_MIGRATE, 2) 661 ADD_GAME_STATE (PKUNK_RETURN, 1) 662 ADD_GAME_STATE (PKUNK_WORRY, 2) 663 ADD_GAME_STATE (PKUNK_INFO, 3) 664 ADD_GAME_STATE (PKUNK_WAR, 2) 665 ADD_GAME_STATE (PKUNK_FORTUNE, 3) 666 ADD_GAME_STATE (PKUNK_MIGRATE_VISITS, 3) 667 ADD_GAME_STATE (PKUNK_REASONS, 4) 668 ADD_GAME_STATE (PKUNK_SWITCH, 1) 669 ADD_GAME_STATE (PKUNK_SENSE_VICTOR, 1) 670 671 ADD_GAME_STATE (KOHR_AH_REASONS, 2) 672 ADD_GAME_STATE (KOHR_AH_PLEAD, 2) 673 ADD_GAME_STATE (KOHR_AH_INFO, 2) 674 ADD_GAME_STATE (KNOW_KOHR_AH_STORY, 2) 675 ADD_GAME_STATE (KOHR_AH_SENSES_EVIL, 1) 676 ADD_GAME_STATE (URQUAN_SENSES_EVIL, 1) 677 678 ADD_GAME_STATE (SLYLANDRO_PROBE_VISITS, 3) 679 ADD_GAME_STATE (SLYLANDRO_PROBE_THREAT, 2) 680 ADD_GAME_STATE (SLYLANDRO_PROBE_WRONG, 2) 681 ADD_GAME_STATE (SLYLANDRO_PROBE_ID, 2) 682 ADD_GAME_STATE (SLYLANDRO_PROBE_INFO, 2) 683 ADD_GAME_STATE (SLYLANDRO_PROBE_EXIT, 2) 684 685 ADD_GAME_STATE (UMGAH_HOSTILE, 1) 686 ADD_GAME_STATE (UMGAH_EVIL_BLOBBIES, 1) 687 ADD_GAME_STATE (UMGAH_MENTIONED_TRICKS, 2) 688 689 ADD_GAME_STATE (BOMB_CARRIER, 1) 690 /* 0 when the flagship is not in battle, or it doesn't have the 691 * enhanced precursor bomb installed. 692 * 1 when the flagship is in battle and the bomb is installed. 693 * This determines whether you can flee (if the warp escape unit 694 * is installed at all), and whether taking the ship into the 695 * Sa-Matra defense structure will trigger the end of the game. 696 */ 697 698 ADD_GAME_STATE (THRADD_MANNER, 1) 699 ADD_GAME_STATE (THRADD_INTRO, 2) 700 ADD_GAME_STATE (THRADD_DEMEANOR, 3) 701 ADD_GAME_STATE (THRADD_INFO, 2) 702 ADD_GAME_STATE (THRADD_BODY_LEVEL, 2) 703 ADD_GAME_STATE (THRADD_MISSION_VISITS, 1) 704 ADD_GAME_STATE (THRADD_STACK_1, 3) 705 ADD_GAME_STATE (THRADD_HOSTILE_STACK_2, 1) 706 ADD_GAME_STATE (THRADD_HOSTILE_STACK_3, 1) 707 ADD_GAME_STATE (THRADD_HOSTILE_STACK_4, 1) 708 ADD_GAME_STATE (THRADD_HOSTILE_STACK_5, 1) 709 710 ADD_GAME_STATE (CHMMR_STACK, 2) 711 712 ADD_GAME_STATE (ARILOU_MANNER, 2) 713 ADD_GAME_STATE (NO_PORTAL_VISITS, 1) 714 ADD_GAME_STATE (ARILOU_STACK_1, 2) 715 ADD_GAME_STATE (ARILOU_STACK_2, 1) 716 ADD_GAME_STATE (ARILOU_STACK_3, 2) 717 ADD_GAME_STATE (ARILOU_STACK_4, 1) 718 ADD_GAME_STATE (ARILOU_STACK_5, 2) 719 ADD_GAME_STATE (ARILOU_INFO, 2) 720 ADD_GAME_STATE (ARILOU_HINTS, 2) 721 722 ADD_GAME_STATE (DRUUGE_MANNER, 1) 723 ADD_GAME_STATE (DRUUGE_SPACE_INFO, 2) 724 ADD_GAME_STATE (DRUUGE_HOME_INFO, 2) 725 ADD_GAME_STATE (DRUUGE_SALVAGE, 1) 726 ADD_GAME_STATE (KNOW_DRUUGE_SLAVERS, 2) 727 ADD_GAME_STATE (FRAGMENTS_BOUGHT, 2) 728 729 ADD_GAME_STATE (ZEX_STACK_1, 2) 730 ADD_GAME_STATE (ZEX_STACK_2, 2) 731 ADD_GAME_STATE (ZEX_STACK_3, 2) 732 733 ADD_GAME_STATE (VUX_INFO, 2) 734 ADD_GAME_STATE (VUX_STACK_1, 4) 735 ADD_GAME_STATE (VUX_STACK_2, 2) 736 ADD_GAME_STATE (VUX_STACK_3, 2) 737 ADD_GAME_STATE (VUX_STACK_4, 2) 738 739 ADD_GAME_STATE (SHOFIXTI_STACK4, 2) 740 741 ADD_GAME_STATE (YEHAT_REBEL_INFO, 3) 742 ADD_GAME_STATE (YEHAT_ROYALIST_INFO, 1) 743 ADD_GAME_STATE (YEHAT_ROYALIST_TOLD_PKUNK, 1) 744 ADD_GAME_STATE (NO_YEHAT_ALLY_HOME, 1) 745 ADD_GAME_STATE (NO_YEHAT_HELP_HOME, 1) 746 ADD_GAME_STATE (NO_YEHAT_INFO, 1) 747 ADD_GAME_STATE (NO_YEHAT_ALLY_SPACE, 2) 748 ADD_GAME_STATE (NO_YEHAT_HELP_SPACE, 2) 749 750 ADD_GAME_STATE (ZOQFOT_KNOW_MASK, 4) 751 752 ADD_GAME_STATE (SUPOX_HOSTILE, 1) 753 ADD_GAME_STATE (SUPOX_INFO, 1) 754 ADD_GAME_STATE (SUPOX_WAR_NEWS, 2) 755 ADD_GAME_STATE (SUPOX_ULTRON_HELP, 1) 756 ADD_GAME_STATE (SUPOX_STACK1, 3) 757 ADD_GAME_STATE (SUPOX_STACK2, 2) 758 759 ADD_GAME_STATE (UTWIG_HOSTILE, 1) 760 ADD_GAME_STATE (UTWIG_INFO, 1) 761 ADD_GAME_STATE (UTWIG_WAR_NEWS, 2) 762 ADD_GAME_STATE (UTWIG_STACK1, 3) 763 ADD_GAME_STATE (UTWIG_STACK2, 2) 764 ADD_GAME_STATE (BOMB_INFO, 1) 765 ADD_GAME_STATE (BOMB_STACK1, 2) 766 ADD_GAME_STATE (BOMB_STACK2, 2) 767 768 ADD_GAME_STATE (SLYLANDRO_KNOW_BROKEN, 1) 769 ADD_GAME_STATE (PLAYER_KNOWS_PROBE, 1) 770 ADD_GAME_STATE (PLAYER_KNOWS_PROGRAM, 1) 771 ADD_GAME_STATE (PLAYER_KNOWS_EFFECTS, 1) 772 ADD_GAME_STATE (PLAYER_KNOWS_PRIORITY, 1) 773 ADD_GAME_STATE (SLYLANDRO_STACK1, 3) 774 ADD_GAME_STATE (SLYLANDRO_STACK2, 1) 775 ADD_GAME_STATE (SLYLANDRO_STACK3, 2) 776 ADD_GAME_STATE (SLYLANDRO_STACK4, 2) 777 ADD_GAME_STATE (SLYLANDRO_STACK5, 1) 778 ADD_GAME_STATE (SLYLANDRO_STACK6, 1) 779 ADD_GAME_STATE (SLYLANDRO_STACK7, 2) 780 ADD_GAME_STATE (SLYLANDRO_STACK8, 2) 781 ADD_GAME_STATE (SLYLANDRO_STACK9, 2) 782 ADD_GAME_STATE (SLYLANDRO_KNOW_EARTH, 1) 783 ADD_GAME_STATE (SLYLANDRO_KNOW_EXPLORE, 1) 784 ADD_GAME_STATE (SLYLANDRO_KNOW_GATHER, 1) 785 ADD_GAME_STATE (SLYLANDRO_KNOW_URQUAN, 2) 786 ADD_GAME_STATE (RECALL_VISITS, 2) 787 788 ADD_GAME_STATE (SLYLANDRO_MULTIPLIER, 3) 789 ADD_GAME_STATE (KNOW_SPATHI_QUEST, 1) 790 ADD_GAME_STATE (KNOW_SPATHI_EVIL, 1) 791 792 ADD_GAME_STATE (BATTLE_PLANET, 8) 793 ADD_GAME_STATE (ESCAPE_COUNTER, 8) 794 795 ADD_GAME_STATE (CREW_SOLD_TO_DRUUGE1, 8) 796 ADD_GAME_STATE (PKUNK_DONE_WAR, 1) 797 798 ADD_GAME_STATE (SYREEN_STACK0, 2) 799 ADD_GAME_STATE (SYREEN_STACK1, 2) 800 ADD_GAME_STATE (SYREEN_STACK2, 2) 801 802 ADD_GAME_STATE (REFUSED_ULTRON_AT_BOMB, 1) 803 ADD_GAME_STATE (NO_TRICK_AT_SUN, 1) 804 805 ADD_GAME_STATE (SPATHI_STACK0, 2) 806 ADD_GAME_STATE (SPATHI_STACK1, 1) 807 ADD_GAME_STATE (SPATHI_STACK2, 1) 808 809 ADD_GAME_STATE (ORZ_STACK0, 1) 810 ADD_GAME_STATE (ORZ_STACK1, 1) 811 812 /* These state bits are actually offsets into defgrp.dat. They really 813 * shouldn't be part of the serialized Game State array! --MCM */ 814 ADD_GAME_STATE (SHOFIXTI_GRPOFFS0, 8) 815 ADD_GAME_STATE (SHOFIXTI_GRPOFFS1, 8) 816 ADD_GAME_STATE (SHOFIXTI_GRPOFFS2, 8) 817 ADD_GAME_STATE (SHOFIXTI_GRPOFFS3, 8) 818 819 ADD_GAME_STATE (ZOQFOT_GRPOFFS0, 8) 820 ADD_GAME_STATE (ZOQFOT_GRPOFFS1, 8) 821 ADD_GAME_STATE (ZOQFOT_GRPOFFS2, 8) 822 ADD_GAME_STATE (ZOQFOT_GRPOFFS3, 8) 823 824 ADD_GAME_STATE (MELNORME0_GRPOFFS0, 8) 825 ADD_GAME_STATE (MELNORME0_GRPOFFS1, 8) 826 ADD_GAME_STATE (MELNORME0_GRPOFFS2, 8) 827 ADD_GAME_STATE (MELNORME0_GRPOFFS3, 8) 828 829 ADD_GAME_STATE (MELNORME1_GRPOFFS0, 8) 830 ADD_GAME_STATE (MELNORME1_GRPOFFS1, 8) 831 ADD_GAME_STATE (MELNORME1_GRPOFFS2, 8) 832 ADD_GAME_STATE (MELNORME1_GRPOFFS3, 8) 833 834 ADD_GAME_STATE (MELNORME2_GRPOFFS0, 8) 835 ADD_GAME_STATE (MELNORME2_GRPOFFS1, 8) 836 ADD_GAME_STATE (MELNORME2_GRPOFFS2, 8) 837 ADD_GAME_STATE (MELNORME2_GRPOFFS3, 8) 838 839 ADD_GAME_STATE (MELNORME3_GRPOFFS0, 8) 840 ADD_GAME_STATE (MELNORME3_GRPOFFS1, 8) 841 ADD_GAME_STATE (MELNORME3_GRPOFFS2, 8) 842 ADD_GAME_STATE (MELNORME3_GRPOFFS3, 8) 843 844 ADD_GAME_STATE (MELNORME4_GRPOFFS0, 8) 845 ADD_GAME_STATE (MELNORME4_GRPOFFS1, 8) 846 ADD_GAME_STATE (MELNORME4_GRPOFFS2, 8) 847 ADD_GAME_STATE (MELNORME4_GRPOFFS3, 8) 848 849 ADD_GAME_STATE (MELNORME5_GRPOFFS0, 8) 850 ADD_GAME_STATE (MELNORME5_GRPOFFS1, 8) 851 ADD_GAME_STATE (MELNORME5_GRPOFFS2, 8) 852 ADD_GAME_STATE (MELNORME5_GRPOFFS3, 8) 853 854 ADD_GAME_STATE (MELNORME6_GRPOFFS0, 8) 855 ADD_GAME_STATE (MELNORME6_GRPOFFS1, 8) 856 ADD_GAME_STATE (MELNORME6_GRPOFFS2, 8) 857 ADD_GAME_STATE (MELNORME6_GRPOFFS3, 8) 858 859 ADD_GAME_STATE (MELNORME7_GRPOFFS0, 8) 860 ADD_GAME_STATE (MELNORME7_GRPOFFS1, 8) 861 ADD_GAME_STATE (MELNORME7_GRPOFFS2, 8) 862 ADD_GAME_STATE (MELNORME7_GRPOFFS3, 8) 863 864 ADD_GAME_STATE (MELNORME8_GRPOFFS0, 8) 865 ADD_GAME_STATE (MELNORME8_GRPOFFS1, 8) 866 ADD_GAME_STATE (MELNORME8_GRPOFFS2, 8) 867 ADD_GAME_STATE (MELNORME8_GRPOFFS3, 8) 868 869 ADD_GAME_STATE (URQUAN_PROBE_GRPOFFS0, 8) 870 ADD_GAME_STATE (URQUAN_PROBE_GRPOFFS1, 8) 871 ADD_GAME_STATE (URQUAN_PROBE_GRPOFFS2, 8) 872 ADD_GAME_STATE (URQUAN_PROBE_GRPOFFS3, 8) 873 874 ADD_GAME_STATE (COLONY_GRPOFFS0, 8) 875 ADD_GAME_STATE (COLONY_GRPOFFS1, 8) 876 ADD_GAME_STATE (COLONY_GRPOFFS2, 8) 877 ADD_GAME_STATE (COLONY_GRPOFFS3, 8) 878 879 ADD_GAME_STATE (SAMATRA_GRPOFFS0, 8) 880 ADD_GAME_STATE (SAMATRA_GRPOFFS1, 8) 881 ADD_GAME_STATE (SAMATRA_GRPOFFS2, 8) 882 ADD_GAME_STATE (SAMATRA_GRPOFFS3, 8) 883 884 END_GAME_STATE 885 886 // Values for GAME_STATE.glob_flags: 887 #define COMBAT_SPEED_SHIFT 6 888 #define COMBAT_SPEED_MASK (((1 << 2) - 1) << COMBAT_SPEED_SHIFT) 889 #define NUM_COMBAT_SPEEDS 4 890 #define MUSIC_DISABLED (1 << 3) 891 #define SOUND_DISABLED (1 << 4) 892 #define CYBORG_ENABLED (1 << 5) 893 894 enum 895 { 896 SUPER_MELEE = 0, /* Is also used while in the main menu */ 897 IN_LAST_BATTLE, 898 IN_ENCOUNTER, 899 IN_HYPERSPACE /* in HyperSpace or QuasiSpace */, 900 IN_INTERPLANETARY, 901 WON_LAST_BATTLE, 902 903 /* The following three are only used when displaying save game 904 * summaries */ 905 IN_QUASISPACE, 906 IN_PLANET_ORBIT, 907 IN_STARBASE, 908 909 CHECK_PAUSE = MAKE_WORD (0, (1 << 0)), 910 IN_BATTLE = MAKE_WORD (0, (1 << 1)), 911 /* Is also set while in HyperSpace/QuasiSpace */ 912 START_ENCOUNTER = MAKE_WORD (0, (1 << 2)), 913 START_INTERPLANETARY = MAKE_WORD (0, (1 << 3)), 914 CHECK_LOAD = MAKE_WORD (0, (1 << 4)), 915 CHECK_RESTART = MAKE_WORD (0, (1 << 5)), 916 CHECK_ABORT = MAKE_WORD (0, (1 << 6)), 917 }; 918 typedef UWORD ACTIVITY; 919 920 typedef struct 921 { 922 BYTE glob_flags; 923 // See above for the meaning of the bits. 924 925 BYTE CrewCost, FuelCost; 926 BYTE ModuleCost[NUM_MODULES]; 927 BYTE ElementWorth[NUM_ELEMENT_CATEGORIES]; 928 929 PRIMITIVE *DisplayArray; 930 ACTIVITY CurrentActivity; 931 932 CLOCK_STATE GameClock; 933 934 POINT autopilot; 935 POINT ip_location; 936 STAMP ShipStamp; 937 UWORD ShipFacing; 938 BYTE ip_planet; 939 BYTE in_orbit; 940 VELOCITY_DESC velocity; 941 942 DWORD BattleGroupRef; 943 QUEUE avail_race_q; 944 /* List of all the races in the game with information 945 * about their ships, and what player knows about their 946 * fleet, center of SoI, status, etc. 947 * queue element is FLEET_INFO */ 948 QUEUE npc_built_ship_q; 949 /* Non-player-character list of ships (during encounter) 950 * queue element is SHIP_FRAGMENT */ 951 QUEUE ip_group_q; 952 /* List of groups present in solarsys (during IP); 953 * queue element is IP_GROUP */ 954 QUEUE encounter_q; 955 /* List of HyperSpace encounters (black globes); 956 * queue element is ENCOUNTER */ 957 QUEUE built_ship_q; 958 /* List of SIS escort ships; 959 * queue element is SHIP_FRAGMENT */ 960 961 BYTE GameState[(NUM_GAME_STATE_BITS + 7) >> 3]; 962 } GAME_STATE; 963 964 typedef struct 965 { 966 SIS_STATE SIS_state; 967 GAME_STATE Game_state; 968 } GLOBDATA; 969 970 extern GLOBDATA GlobData; 971 #define GLOBAL(f) GlobData.Game_state.f 972 #define GLOBAL_SIS(f) GlobData.SIS_state.f 973 974 #define MAX_ENCOUNTERS 16 975 #define MAX_BATTLE_GROUPS 32 976 977 /* DEFGRP enumeration. These identify scripted TrueSpace encounters 978 * more consistently than offsets into the DEFGRPINFO_FILE state 979 * file. */ 980 enum { 981 DEFGRP_NONE, 982 DEFGRP_SHOFIXTI, 983 DEFGRP_ZOQFOT, 984 DEFGRP_MELNORME0, 985 DEFGRP_MELNORME1, 986 DEFGRP_MELNORME2, 987 DEFGRP_MELNORME3, 988 DEFGRP_MELNORME4, 989 DEFGRP_MELNORME5, 990 DEFGRP_MELNORME6, 991 DEFGRP_MELNORME7, 992 DEFGRP_MELNORME8, 993 DEFGRP_URQUAN_PROBE, 994 DEFGRP_COLONY, 995 DEFGRP_SAMATRA, 996 NUM_DEFGRPS 997 }; 998 999 //#define STATE_DEBUG 1000 1001 extern BYTE getGameState (BYTE *state, int startBit, int endBit); 1002 extern void setGameState (BYTE *state, int startBit, int endBit, BYTE val 1003 #ifdef STATE_DEBUG 1004 , const char *name 1005 #endif 1006 ); 1007 extern void copyGameState (BYTE *dest, DWORD target, BYTE *src, DWORD begin, DWORD end); 1008 1009 #define GET_GAME_STATE(SName) getGameState (GLOBAL(GameState), (SName), (END_##SName)) 1010 #ifdef STATE_DEBUG 1011 # define SET_GAME_STATE(SName, val) \ 1012 setGameState (GLOBAL(GameState), (SName), (END_##SName), (val), #SName) 1013 #else 1014 # define SET_GAME_STATE(SName, val) \ 1015 setGameState (GLOBAL(GameState), (SName), (END_##SName), (val)) 1016 #endif 1017 1018 extern DWORD getGameState32 (BYTE *state, int startBit); 1019 extern void setGameState32 (BYTE *state, int startBit, DWORD val 1020 #ifdef STATE_DEBUG 1021 , const char *name 1022 #endif 1023 ); 1024 1025 #define GET_GAME_STATE_32(SName) getGameState32 (GLOBAL(GameState), (SName)) 1026 #ifdef STATE_DEBUG 1027 # define SET_GAME_STATE_32(SName, val) \ 1028 setGameState32 (GLOBAL(GameState), (SName), (val), #SName) 1029 #else 1030 # define SET_GAME_STATE_32(SName, val) \ 1031 setGameState32 (GLOBAL(GameState), (SName), (val)) 1032 #endif 1033 1034 1035 extern CONTEXT RadarContext; 1036 1037 extern void FreeSC2Data (void); 1038 extern BOOLEAN LoadSC2Data (void); 1039 1040 extern void InitGlobData (void); 1041 1042 BOOLEAN inFullGame (void); 1043 BOOLEAN inSuperMelee (void); 1044 //BOOLEAN inBattle (void); 1045 //BOOLEAN inInterPlanetary (void); 1046 //BOOLEAN inSolarSystem (void); 1047 //BOOLEAN inOrbit (void); 1048 BOOLEAN inHQSpace (void); 1049 BOOLEAN inHyperSpace (void); 1050 BOOLEAN inQuasiSpace (void); 1051 1052 extern BOOLEAN InitGameStructures (void); 1053 extern void UninitGameStructures (void); 1054 1055 #if defined(__cplusplus) 1056 } 1057 #endif 1058 1059 #endif /* UQM_GLOBDATA_H_ */ 1060