1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807
|
/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* 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 3 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, see <http://www.gnu.org/licenses/>.
*
*/
#ifndef STARTREK_AWAYMISSION_H
#define STARTREK_AWAYMISSION_H
// All variables here get cleared to 0 upon starting an away mission.
// NOTE: Any changes here must be reflected in the corresponding serializer functions.
struct AwayMission {
// These timers count down automatically when nonzero. When they reach 0,
// ACTION_TIMER_EXPIRED is invoked with the corresponding index (0-7).
int16 timers[8]; // 0x00-0x0f
int16 mouseX; // 0x10
int16 mouseY; // 0x12
int16 crewGetupTimers[4]; // 0x14
bool disableWalking; // 0x1c
// 0 / false: input enabled
// 1 / true: input disabled, turns back on after walking or beaming into a room
// 2: input disabled, doesn't turn back on after walking or beaming into room
byte disableInput; // 0x1d
bool redshirtDead; // 0x1e
char activeAction; // 0x1f
byte activeObject; // 0x20; The item that is going to be used on something
byte passiveObject; // 0x21; The item that the active item is used on (or the item looked at, etc).
// If this is true after calling room-specific RDF code, the game will continue to run
// any "default" code for the event, if any.
bool rdfStillDoDefaultAction; // 0x23
// If a bit in "crewDownBitset" is set, the corresponding timer in "crewGetupTimers"
// begins counting down. When it reaches 0, they get up.
byte crewDownBitset; // 0x24
int8 crewDirectionsAfterWalk[4]; // 0x25: Sets an object's direction after they finish walking somewhere?
// Mission-specific variables
union {
// Demon World (TODO: label remaining generic variables)
struct {
bool wasRudeToPrelate; // 0x29
bool insultedStephen; // 0x2b
bool field2d; // 0x2d
bool beatKlingons; // 0x2f
bool tookKlingonHand; // 0x31
bool talkedToPrelate; // 0x33
bool stephenWelcomedToStudy; // 0x34
bool prelateWelcomedCrew; // 0x35
bool askedPrelateAboutSightings; // 0x36
byte field37; // 0x37
bool mccoyMentionedFlora; // 0x38
byte numBouldersGone; // 0x39
byte enteredFrom; // 0x3a
bool repairedHand; // 0x3b
bool healedMiner; // 0x3c
bool curedChub; // 0x3d
bool field3e; // 0x3e
bool knowAboutHypoDytoxin; // 0x3f
bool minerDead; // 0x40
byte field41; // 0x41
bool foundMiner; // 0x43
bool field45; // 0x45
bool gaveSkullToNauian; // 0x47
bool warpsDisabled; // 0x48
bool boulder1Gone; // 0x49
bool boulder2Gone; // 0x4a
bool boulder3Gone; // 0x4b
bool boulder4Gone; // 0x4c
bool doorOpened; // 0x4d
bool solvedSunPuzzle; // 0x4e
byte itemsTakenFromCase; // 0x4f
bool gotBerries; // 0x50
bool madeHypoDytoxin; // 0x51
bool metNauian; // 0x53
bool gavePointsForDytoxin; // 0x54
bool lookedAtComputer; // 0x55
byte field56; // 0x56
bool foundAlienRoom; // 0x57
int16 missionScore; // 0x58
void saveLoadWithSerializer(Common::Serializer &ser) {
ser.syncAsByte(wasRudeToPrelate);
ser.syncAsByte(insultedStephen);
ser.syncAsByte(field2d);
ser.syncAsByte(beatKlingons);
ser.syncAsByte(tookKlingonHand);
ser.syncAsByte(talkedToPrelate);
ser.syncAsByte(stephenWelcomedToStudy);
ser.syncAsByte(prelateWelcomedCrew);
ser.syncAsByte(askedPrelateAboutSightings);
ser.syncAsByte(field37);
ser.syncAsByte(mccoyMentionedFlora);
ser.syncAsByte(numBouldersGone);
ser.syncAsByte(enteredFrom);
ser.syncAsByte(repairedHand);
ser.syncAsByte(healedMiner);
ser.syncAsByte(curedChub);
ser.syncAsByte(field3e);
ser.syncAsByte(knowAboutHypoDytoxin);
ser.syncAsByte(minerDead);
ser.syncAsByte(field41);
ser.syncAsByte(foundMiner);
ser.syncAsByte(field45);
ser.syncAsByte(gaveSkullToNauian);
ser.syncAsByte(warpsDisabled);
ser.syncAsByte(boulder1Gone);
ser.syncAsByte(boulder2Gone);
ser.syncAsByte(boulder3Gone);
ser.syncAsByte(boulder4Gone);
ser.syncAsByte(doorOpened);
ser.syncAsByte(solvedSunPuzzle);
ser.syncAsByte(itemsTakenFromCase);
ser.syncAsByte(gotBerries);
ser.syncAsByte(madeHypoDytoxin);
ser.syncAsByte(metNauian);
ser.syncAsByte(gavePointsForDytoxin);
ser.syncAsByte(lookedAtComputer);
ser.syncAsByte(field56);
ser.syncAsByte(foundAlienRoom);
ser.syncAsSint16LE(missionScore);
}
} demon;
// Hijacked
struct {
int16 missionScore; // 0x29
int16 field2b; // 0x2b
int16 field2d; // 0x2d
bool engineerConscious; // 0x30
byte field35; // 0x35
bool gotWires; // 0x37
byte orbitalDecayCounter; // 0x3b
bool bridgeElasiDrewPhasers; // 0x3d
bool talkedToCereth; // 0x3e
bool gotJunkPile; // 0x3f
bool gotTransmogrifier; // 0x43
bool transporterRepaired; // 0x44
bool spockExaminedTransporter; // 0x45
bool usedTransmogrifierOnTransporter; // 0x46
bool bridgeForceFieldDown; // 0x47
bool savedPrisoners; // 0x48
bool haveBomb; // 0x49
bool brigElasiPhasersOnKill; // 0x4a
byte elasiTargetIndex; // 0x4b
byte guard1Status; // 0x4c
byte guard2Status; // 0x4d
byte field4e; // 0x4e
byte crewmanKilled[4]; // 0x4f
byte bridgeElasi1Status; // 0x53
byte bridgeElasi2Status; // 0x54
byte bridgeElasi3Status; // 0x55
byte bridgeElasi4Status; // 0x56
bool brigForceFieldDown; // 0x58
byte field59; // 0x59
byte field5b; // 0x5b
bool elasiSurrendered; // 0x5c
byte kirkPhaserDrawn; // 0x5d
// 1: Decided to shoot them
// 2: Talked, and they surrendered immediately
// 3: They deorbited the ship (and perhaps surrendered after)
byte bridgeWinMethod; // 0x5e
bool talkedToBrigCrewman; // 0x5f
void saveLoadWithSerializer(Common::Serializer &ser) {
ser.syncAsSint16LE(missionScore);
ser.syncAsSint16LE(field2b);
ser.syncAsSint16LE(field2d);
ser.syncAsByte(engineerConscious);
ser.syncAsByte(field35);
ser.syncAsByte(gotWires);
ser.syncAsByte(orbitalDecayCounter);
ser.syncAsByte(bridgeElasiDrewPhasers);
ser.syncAsByte(talkedToCereth);
ser.syncAsByte(gotJunkPile);
ser.syncAsByte(gotTransmogrifier);
ser.syncAsByte(transporterRepaired);
ser.syncAsByte(spockExaminedTransporter);
ser.syncAsByte(usedTransmogrifierOnTransporter);
ser.syncAsByte(bridgeForceFieldDown);
ser.syncAsByte(savedPrisoners);
ser.syncAsByte(haveBomb);
ser.syncAsByte(brigElasiPhasersOnKill);
ser.syncAsByte(elasiTargetIndex);
ser.syncAsByte(guard1Status);
ser.syncAsByte(guard2Status);
ser.syncAsByte(field4e);
ser.syncBytes(crewmanKilled, 4);
ser.syncAsByte(bridgeElasi1Status);
ser.syncAsByte(bridgeElasi2Status);
ser.syncAsByte(bridgeElasi3Status);
ser.syncAsByte(bridgeElasi4Status);
ser.syncAsByte(brigForceFieldDown);
ser.syncAsByte(field59);
ser.syncAsByte(field5b);
ser.syncAsByte(elasiSurrendered);
ser.syncAsByte(kirkPhaserDrawn);
ser.syncAsByte(bridgeWinMethod);
ser.syncAsByte(talkedToBrigCrewman);
}
} tug;
// Love's Labor Jeopardized
struct {
bool alreadyStartedMission; // 0x29
bool knowAboutVirus; // 0x2a
bool romulansUnconsciousFromLaughingGas; // 0x2b
bool releasedHumanLaughingGas; // 0x2c
bool releasedRomulanLaughingGas; // 0x2d
bool chamberHasCure; // 0x2e
bool freezerOpen; // 0x2f
bool chamberHasDish; // 0x30
byte bottleInNozzle; // 0x31
bool cabinetOpen; // 0x32
bool gasFeedOn; // 0x33
byte synthesizerBottleIndex; // 0x34
byte synthesizerContents; // 0x35
byte canister1; // 0x36
byte canister2; // 0x37
bool servicePanelOpen; // 0x38
bool gasTankUnscrewed; // 0x39
bool wrenchTaken; // 0x3a
bool tookN2TankFromServicePanel; // 0x3b
bool field3c; // 0x3c
bool grateRemoved; // 0x3d
bool insulationOnGround; // 0x3e
bool visitedRoomWithRomulans; // 0x3f
bool romulansCured; // 0x40
bool romulansUnconsciousFromVirus; // 0x41
bool freedMarcusAndCheever; // 0x42
bool preaxCured; // 0x43
byte spockInfectionCounter; // 0x45: When this reached 100, Spock dies.
bool spockCured; // 0x46
bool contactedEnterpriseBeforeCure; // 0x47
bool contactedEnterpriseAfterCure; // 0x48
bool spockAccessedConsole; // 0x49
bool mccoyAccessedConsole; // 0x4a
bool gotPolyberylcarbonate; // 0x4b
bool gotTLDH; // 0x4c (Got romulan laughing gas)
bool gotPointsForOpeningGrate; // 0x4d
bool gotPointsForGassingRomulans; // 0x4e
bool gotCure; // 0x4f
bool gotPointsForHydratingPreax; // 0x50
bool gotPointsForHydratingRomulans; // 0x51
int16 missionScore; // 0x52
void saveLoadWithSerializer(Common::Serializer &ser) {
ser.syncAsByte(alreadyStartedMission);
ser.syncAsByte(knowAboutVirus);
ser.syncAsByte(romulansUnconsciousFromLaughingGas);
ser.syncAsByte(releasedHumanLaughingGas);
ser.syncAsByte(releasedRomulanLaughingGas);
ser.syncAsByte(chamberHasCure);
ser.syncAsByte(freezerOpen);
ser.syncAsByte(chamberHasDish);
ser.syncAsByte(bottleInNozzle);
ser.syncAsByte(cabinetOpen);
ser.syncAsByte(gasFeedOn);
ser.syncAsByte(synthesizerBottleIndex);
ser.syncAsByte(synthesizerContents);
ser.syncAsByte(canister1);
ser.syncAsByte(canister2);
ser.syncAsByte(servicePanelOpen);
ser.syncAsByte(gasTankUnscrewed);
ser.syncAsByte(wrenchTaken);
ser.syncAsByte(tookN2TankFromServicePanel);
ser.syncAsByte(field3c);
ser.syncAsByte(grateRemoved);
ser.syncAsByte(insulationOnGround);
ser.syncAsByte(visitedRoomWithRomulans);
ser.syncAsByte(romulansCured);
ser.syncAsByte(romulansUnconsciousFromVirus);
ser.syncAsByte(freedMarcusAndCheever);
ser.syncAsByte(preaxCured);
ser.syncAsByte(spockInfectionCounter);
ser.syncAsByte(spockCured);
ser.syncAsByte(contactedEnterpriseBeforeCure);
ser.syncAsByte(contactedEnterpriseAfterCure);
ser.syncAsByte(spockAccessedConsole);
ser.syncAsByte(mccoyAccessedConsole);
ser.syncAsByte(gotPolyberylcarbonate);
ser.syncAsByte(gotTLDH);
ser.syncAsByte(gotPointsForOpeningGrate);
ser.syncAsByte(gotPointsForGassingRomulans);
ser.syncAsByte(gotCure);
ser.syncAsByte(gotPointsForHydratingPreax);
ser.syncAsByte(gotPointsForHydratingRomulans);
ser.syncAsSint16LE(missionScore);
}
} love;
struct {
// 0: Haven't entered first room yet
// 1: Have entered first room once
// 2: Mudd is gone from first room
byte muddFirstRoomState; // 0x29
bool torpedoLoaded; // 0x33
bool knowAboutTorpedo; // 0x34
bool discoveredBase3System; // 0x35
bool translatedAlienLanguage; // 0x36
bool databaseDestroyed; // 0x37
bool muddInDatabaseRoom; // 0x38
bool muddCurrentlyInsane; // 0x39
bool computerDataErasedOrDestroyed; // 0x3a
bool muddErasedDatabase; // 0x3b
// True if you've combined the lense + degrimer and fired it off, discovering
// it's a weapon
bool discoveredLenseAndDegrimerFunction; // 0x3c
int16 torpedoStatus; // 0x3d
bool muddUnavailable; // 0x3f
bool muddVisitedDatabaseRoom; // 0x40
bool accessedAlienDatabase; // 0x41
bool tookRepairTool; // 0x42
bool gotPointsForDownloadingData; // 0x43
bool contactedEnterpriseFirstTime; // 0x44
bool viewScreenEnabled; // 0x45
bool lifeSupportMalfunctioning; // 0x46
byte numTimesEnteredRoom5; // 0x47
bool gotMemoryDisk; // 0x48
bool gotLense; // 0x49
bool gotDegrimer; // 0x4a
bool putCapsuleInMedicalMachine; // 0x4c
bool muddUnconscious; // 0x4d
// 0: haven't entered room yet
// 1: will go insane next time room is entered (if he's available)
// 2: currently insane (or unconscious)
// 3: cured
byte muddInsanityState; // 0x4e
bool muddInhaledGas; // 0x4f (mostly the same as "muddCurrentlyInsane"?)
int16 lifeSupportTimer; // 0x50
bool startedLifeSupportTimer; // 0x52
bool enteredRoom0ForFirstTime; // 0x54
bool gotPointsForLoadingTorpedo; // 0x55
bool gotPointsForPressingRedButton; // 0x56
bool gotPointsForEnablingViewscreen; // 0x57
bool enteredRoom1ForFirstTime; // 0x58
bool repairedLifeSupportGenerator; // 0x59
int16 missionScore; // 0x5a
void saveLoadWithSerializer(Common::Serializer &ser) {
ser.syncAsByte(muddFirstRoomState);
ser.syncAsByte(torpedoLoaded);
ser.syncAsByte(knowAboutTorpedo);
ser.syncAsByte(discoveredBase3System);
ser.syncAsByte(translatedAlienLanguage);
ser.syncAsByte(databaseDestroyed);
ser.syncAsByte(muddInDatabaseRoom);
ser.syncAsByte(muddCurrentlyInsane);
ser.syncAsByte(computerDataErasedOrDestroyed);
ser.syncAsByte(muddErasedDatabase);
ser.syncAsByte(discoveredLenseAndDegrimerFunction);
ser.syncAsSint16LE(torpedoStatus);
ser.syncAsByte(muddUnavailable);
ser.syncAsByte(muddVisitedDatabaseRoom);
ser.syncAsByte(accessedAlienDatabase);
ser.syncAsByte(tookRepairTool);
ser.syncAsByte(gotPointsForDownloadingData);
ser.syncAsByte(contactedEnterpriseFirstTime);
ser.syncAsByte(viewScreenEnabled);
ser.syncAsByte(lifeSupportMalfunctioning);
ser.syncAsByte(numTimesEnteredRoom5);
ser.syncAsByte(gotMemoryDisk);
ser.syncAsByte(gotLense);
ser.syncAsByte(gotDegrimer);
ser.syncAsByte(putCapsuleInMedicalMachine);
ser.syncAsByte(muddUnconscious);
ser.syncAsByte(muddInsanityState);
ser.syncAsByte(muddInhaledGas);
ser.syncAsSint16LE(lifeSupportTimer);
ser.syncAsByte(startedLifeSupportTimer);
ser.syncAsByte(enteredRoom0ForFirstTime);
ser.syncAsByte(gotPointsForLoadingTorpedo);
ser.syncAsByte(gotPointsForPressingRedButton);
ser.syncAsByte(gotPointsForEnablingViewscreen);
ser.syncAsByte(enteredRoom1ForFirstTime);
ser.syncAsByte(repairedLifeSupportGenerator);
ser.syncAsSint16LE(missionScore);
}
} mudd;
struct {
bool diedFromStalactites; // 0x29
// 0: initial state
// 1: one rock thrown at it
// 2: two rocks thrown at it (low enough to climb up)
byte vineState; // 0x2a
bool gotRock; // 0x2b
bool gotSnake; // 0x2c
bool tookKnife; // 0x2d
bool field2e; // 0x2e
byte numRocksThrownAtTlaoxac; // 0x2f
bool gotFern; // 0x30
bool holeBlocked; // 0x31
bool tlaoxacTestPassed; // 0x32
bool knockedOutTlaoxac; // 0x33
bool waterMonsterRetreated; // 0x34
bool showedSnakeToTlaoxac; // 0x35
int16 missionScore; // 0x36
void saveLoadWithSerializer(Common::Serializer &ser) {
ser.syncAsByte(diedFromStalactites);
ser.syncAsByte(vineState);
ser.syncAsByte(gotRock);
ser.syncAsByte(gotSnake);
ser.syncAsByte(tookKnife);
ser.syncAsByte(field2e);
ser.syncAsByte(numRocksThrownAtTlaoxac);
ser.syncAsByte(gotFern);
ser.syncAsByte(holeBlocked);
ser.syncAsByte(tlaoxacTestPassed);
ser.syncAsByte(knockedOutTlaoxac);
ser.syncAsByte(waterMonsterRetreated);
ser.syncAsByte(showedSnakeToTlaoxac);
ser.syncAsSint16LE(missionScore);
}
} feather;
struct {
int16 missionScore; // 0x29
int16 field2b; // 0x2b
bool entityDefeated; // 0x31: Used iron rod on the energy being
bool doorOpen; // 0x32
bool scannedLock; // 0x33
// 0: Don't know the door code yet
// 2: Will just open the door when the keypad is used
// 5: Will activate the unknown program when the keypad is used
byte doorCodeBehaviour; // 0x34
bool globSplitInTwo; // 0x35
bool globDefeated; // 0x36
byte globEnergyLevels[3]; // 0x37
bool enteredTrial3FirstTime; // 0x3a
byte klingonShootIndex; // 0x3b
byte shotKlingons; // 0x3c
// 0: Hasn't appeared yet
// 21: Is conscious
// 22: Is stunned
// 23: Is dead
int16 shotKlingonState; // 0x3d
bool neuralInterfaceActive; // 0x43
int16 holeContents[3]; // 0x44 (Holes to put gems in for TRIAL5)
bool enteredGlobRoom; // 0x5c
bool forceFieldDown; // 0x5d
bool uhuraAnalyzedCode; // 0x5e
// 0: Gave up in court, letting Quetzecoatl die
// 1: Beamed to enterprise after calling Uhura
// 2: Lost the court battle after beaming back to the courtroom
// 3: Quetzecoatl goes free and Vlict doesn't die
// 4: Quetzecoatl goes free and Vlict dies
int16 missionEndMethod; // 0x5f
bool gotPointsForGettingRod; // 0x61
bool gotPointsForCoatingRodWithIron; // 0x62
bool gotPointsForActivatingInterface; // 0x63
bool gotPointsForScanningGlob; // 0x64
bool gotPointsForBeamingOut;
void saveLoadWithSerializer(Common::Serializer &ser) {
ser.syncAsSint16LE(missionScore);
ser.syncAsSint16LE(field2b);
ser.syncAsByte(entityDefeated);
ser.syncAsByte(doorOpen);
ser.syncAsByte(scannedLock);
ser.syncAsByte(doorCodeBehaviour);
ser.syncAsByte(globSplitInTwo);
ser.syncAsByte(globDefeated);
ser.syncBytes(globEnergyLevels, 3);
ser.syncAsByte(enteredTrial3FirstTime);
ser.syncAsByte(klingonShootIndex);
ser.syncAsByte(shotKlingons);
ser.syncAsSint16LE(shotKlingonState);
ser.syncAsByte(neuralInterfaceActive);
for (int i = 0; i < 3; i++)
ser.syncAsSint16LE(holeContents[i]);
ser.syncAsByte(enteredGlobRoom);
ser.syncAsByte(forceFieldDown);
ser.syncAsByte(uhuraAnalyzedCode);
ser.syncAsSint16LE(missionEndMethod);
ser.syncAsByte(gotPointsForGettingRod);
ser.syncAsByte(gotPointsForCoatingRodWithIron);
ser.syncAsByte(gotPointsForActivatingInterface);
ser.syncAsByte(gotPointsForScanningGlob);
ser.syncAsByte(gotPointsForBeamingOut);
}
} trial;
struct {
byte field31; // 0x31
byte field32; // 0x32
bool field33; // 0x33
bool doorLaserFiredOnce; // 0x34
bool gotPointsForAccessingTerminal; // 0x35
bool scannedKeycardLock; // 0x36
byte laserSetting; // 0x37
// 0 if the laser hasn't been programmed with the keycard template;
// 1 if it has been programmed with the template;
// 2 if the rock has been placed on the wall.
byte laserPattern; // 0x38
// bit 0: got a rock, or at least scanned the ground outside
// bit 1: entered mineshaft room
// bit 2: scanned the ID card panel
// bit 3: set after all 3 clues are obtained and Spock explains how to make
// the keycard
byte gatheredClues; // 0x39
// bit 0: scanned left computer
// bit 1: scanned right computer
// bit 2: accessed left computer
// bit 3: accessed right computer
byte scannedAndUsedComputers; // 0x3a
bool wireConnected1; // 0x3b
bool wireConnected2; // 0x3c
bool openedOuterDoor; // 0x3d
bool openedInnerDoor; // 0x3e
bool unlockedIDCardDoor; // 0x3f
// 0: mold hasn't been created
// 2: mold for the keycard has been etched into the rock
// 3: rock placed top of the mold
// 4: a keycard is there
int8 moldState; // 0x40
// 0: box closed
// 1: box open
// 2: box empty
byte boxState; // 0x41
bool enteredRoom0FirstTime; // 0x42
bool scottyInformedKirkAboutVirus; // 0x43
bool enteredRoom2FirstTime; // 0x44
bool enteredRoom3FirstTime; // 0x45
bool enteredRoom4FirstTime; // 0x46
bool enteredRoom5FirstTime; // 0x47
bool gotPointsForScanningStatue; // 0x48
bool gotPointsForScanningRoom4; // 0x49
bool gotPointsForScanningRoom5; // 0x4a
bool gotPointsForScanningRightComputer; // 0x4b
bool gotPointsForScanningLeftComputer; // 0x4c
bool gotPointsForUsingRightComputer; // 0x4d
bool gotPointsForUsingLeftComputer; // 0x4e
bool discoveredComputersOutOfSync; // 0x4f
bool enteredRoom1FirstTime; // 0x50
bool playedMusicUponEnteringRoom5FirstTime; // 0x51
int16 missionScore; // 0x52
void saveLoadWithSerializer(Common::Serializer &ser) {
ser.syncAsByte(field31);
ser.syncAsByte(field32);
ser.syncAsByte(field33);
ser.syncAsByte(doorLaserFiredOnce);
ser.syncAsByte(gotPointsForAccessingTerminal);
ser.syncAsByte(scannedKeycardLock);
ser.syncAsByte(laserSetting);
ser.syncAsByte(laserPattern);
ser.syncAsByte(gatheredClues);
ser.syncAsByte(scannedAndUsedComputers);
ser.syncAsByte(wireConnected1);
ser.syncAsByte(wireConnected2);
ser.syncAsByte(openedOuterDoor);
ser.syncAsByte(openedInnerDoor);
ser.syncAsByte(unlockedIDCardDoor);
ser.syncAsByte(moldState);
ser.syncAsByte(boxState);
ser.syncAsByte(enteredRoom0FirstTime);
ser.syncAsByte(scottyInformedKirkAboutVirus);
ser.syncAsByte(enteredRoom2FirstTime);
ser.syncAsByte(enteredRoom3FirstTime);
ser.syncAsByte(enteredRoom4FirstTime);
ser.syncAsByte(enteredRoom5FirstTime);
ser.syncAsByte(gotPointsForScanningStatue);
ser.syncAsByte(gotPointsForScanningRoom4);
ser.syncAsByte(gotPointsForScanningRoom5);
ser.syncAsByte(gotPointsForScanningRightComputer);
ser.syncAsByte(gotPointsForScanningLeftComputer);
ser.syncAsByte(gotPointsForUsingRightComputer);
ser.syncAsByte(gotPointsForUsingLeftComputer);
ser.syncAsByte(discoveredComputersOutOfSync);
ser.syncAsByte(enteredRoom1FirstTime);
ser.syncAsByte(playedMusicUponEnteringRoom5FirstTime);
ser.syncAsSint16LE(missionScore);
}
} sins;
struct {
bool usedMedkitOnBrittany; // 0x29
bool talkedToBrittany; // 0x2a
bool brittanyDead; // 0x2b
bool lookedAtBrittany; // 0x2c
bool enteredRoom0FirstTime; // 0x2d
int16 missionScore; // 0x2e
bool bridgeCrewmanDead; // 0x30
bool scannedCaptainsChair; // 0x31
bool scannedComputerBank; // 0x32
bool showedRepublicMapFirstTime; // 0x33
bool impulseEnginesOn; // 0x34
// 0: beam still in place
// 1: used saw on beam
// 2: beam taken
byte beamState; // 0x35
bool enterpriseLeftForDistressCall; // 0x36
bool openedPanel; // 0x37
bool clearedPanelDebris; // 0x38
bool removedPanelDebris; // 0x39
bool oilInHypo; // 0x3a
bool loosenedDebrisWithOil; // 0x3b
// 0: no power allocated
// 1: power to weapons
// 2: power to shields
// 3: power to transporter
byte poweredSystem; // 0x3c
// 0: no tricorders plugged in
// 1: med tricorder plugged in
// 2: sci tricorder plugged in
// 3: both plugged in
byte tricordersPluggedIntoComputer; // 0x3d
byte captainsLogIndex; // 0x3e
bool elasiShieldsDown; // 0x40
bool torpedoLoaded; // 0x41
bool firedTorpedo; // 0x42
bool elasiShipDecloaked; // 0x43
bool countdownStarted; // 0x44
bool toldElasiToBeamOver; // 0x45
bool scannedMainComputer; // 0x46
bool elasiHailedRepublic; // 0x47
bool tookRecordDeckFromAuxilaryControl; // 0x48
// Counter used when shields are down and Elasi are present
int16 counterUntilElasiBoardWithShieldsDown; // 0x49
// Counter used after talking with Elasi and they give you time to recover the
// data
int16 counterUntilElasiAttack; // 0x4b
// Counter used after telling Elasi you'll turn off shields (initial warning)
int16 counterUntilElasiNagToDisableShields; // 0x4d
// Counter used after telling Elasi you'll turn off shields (they destroy the
// ship this time)
int16 counterUntilElasiDestroyShip; // 0x4f
// Counter used after telling Elasi to beam over
int16 counterUntilElasiBoardWithInvitation; // 0x51
bool putSupportBeamInSickbayHallway; // 0x53
bool clearedDebris; // 0x54
bool lookedAtTurbolift2Door; // 0x55
bool kirkShouldSuggestReestablishingPower; // 0x56
bool tookHypoFromSickbay; // 0x57
bool tookDrillFromSickbay; // 0x58
bool clearedDebrisInRoom5; // 0x59
bool havePowerPack; // 0x5a
bool enteredRoom5FirstTime; // 0x5b
bool askedSpockAboutFire; // 0x5c
// bits 0-1 are set for each of the 2 cables that can be connected to the
// junction box in engineering.
byte junctionCablesConnected; // 0x5d
bool tookCableFromTransporterRoomHallway; // 0x5e
bool tookCableFromSickbayHallway; // 0x5f
bool tookMolecularSaw; // 0x60
bool readEngineeringJournal; // 0x61
bool tookEngineeringJournal; // 0x62
bool engineeringCabinetOpen; // 0x63
bool setTransporterCoordinates; // 0x65
bool examinedTorpedoControl; // 0x66
bool powerPackPluggedIntoTransporter; // 0x67
bool field68; // 0x68
bool getPointsForHealingBrittany; // 0x69
bool readAllLogs; // 0x6a
bool field6b; // 0x6b
bool field6c; // 0x6c
void saveLoadWithSerializer(Common::Serializer &ser) {
ser.syncAsByte(usedMedkitOnBrittany);
ser.syncAsByte(talkedToBrittany);
ser.syncAsByte(brittanyDead);
ser.syncAsByte(lookedAtBrittany);
ser.syncAsByte(enteredRoom0FirstTime);
ser.syncAsSint16LE(missionScore);
ser.syncAsByte(bridgeCrewmanDead);
ser.syncAsByte(scannedCaptainsChair);
ser.syncAsByte(scannedComputerBank);
ser.syncAsByte(impulseEnginesOn);
ser.syncAsByte(beamState);
ser.syncAsByte(enterpriseLeftForDistressCall);
ser.syncAsByte(openedPanel);
ser.syncAsByte(clearedPanelDebris);
ser.syncAsByte(removedPanelDebris);
ser.syncAsByte(oilInHypo);
ser.syncAsByte(loosenedDebrisWithOil);
ser.syncAsByte(poweredSystem);
ser.syncAsByte(tricordersPluggedIntoComputer);
ser.syncAsByte(captainsLogIndex);
ser.syncAsByte(elasiShieldsDown);
ser.syncAsByte(torpedoLoaded);
ser.syncAsByte(firedTorpedo);
ser.syncAsByte(elasiShipDecloaked);
ser.syncAsByte(countdownStarted);
ser.syncAsByte(toldElasiToBeamOver);
ser.syncAsByte(scannedMainComputer);
ser.syncAsByte(elasiHailedRepublic);
ser.syncAsByte(tookRecordDeckFromAuxilaryControl);
ser.syncAsSint16LE(counterUntilElasiBoardWithShieldsDown);
ser.syncAsSint16LE(counterUntilElasiAttack);
ser.syncAsSint16LE(counterUntilElasiNagToDisableShields);
ser.syncAsSint16LE(counterUntilElasiDestroyShip);
ser.syncAsSint16LE(counterUntilElasiBoardWithInvitation);
ser.syncAsByte(clearedDebris);
ser.syncAsByte(lookedAtTurbolift2Door);
ser.syncAsByte(kirkShouldSuggestReestablishingPower);
ser.syncAsByte(tookHypoFromSickbay);
ser.syncAsByte(tookDrillFromSickbay);
ser.syncAsByte(clearedDebrisInRoom5);
ser.syncAsByte(havePowerPack);
ser.syncAsByte(enteredRoom5FirstTime);
ser.syncAsByte(askedSpockAboutFire);
ser.syncAsByte(junctionCablesConnected);
ser.syncAsByte(tookCableFromTransporterRoomHallway);
ser.syncAsByte(tookCableFromSickbayHallway);
ser.syncAsByte(tookMolecularSaw);
ser.syncAsByte(readEngineeringJournal);
ser.syncAsByte(tookEngineeringJournal);
ser.syncAsByte(engineeringCabinetOpen);
ser.syncAsByte(setTransporterCoordinates);
ser.syncAsByte(examinedTorpedoControl);
ser.syncAsByte(powerPackPluggedIntoTransporter);
ser.syncAsByte(field68);
ser.syncAsByte(getPointsForHealingBrittany);
ser.syncAsByte(readAllLogs);
ser.syncAsByte(field6b);
ser.syncAsByte(field6c);
}
} veng;
};
};
// Size: 0x129 bytes
// Bottle types for Love's Labor Jeopardized
enum BottleTypes {
BOTTLETYPE_NONE = 0,
BOTTLETYPE_N2O = 1,
BOTTLETYPE_NH3 = 2,
BOTTLETYPE_H2O = 3,
BOTTLETYPE_RLG = 4 // Romulan Laughing Gas
};
// Canister types for Love's Labor Jeopardized
enum CanisterTypes {
CANTYPE_NONE = 0,
CANTYPE_O2 = 1,
CANTYPE_H2 = 2,
CANTYPE_N2 = 3
};
// Synthesizer contents for Love's Labor Jeopardized (values for synthesizerContents)
enum SynthesizerContent {
SYNTHITEM_NONE = 0,
SYNTHITEM_PBC = 1,
SYNTHITEM_VIRUS_SAMPLE = 2,
SYNTHITEM_CURE_SAMPLE = 3,
SYNTHITEM_BOTTLE = 9 // Contents of bottle determined by "synthesizerBottleIndex" variable
};
#endif
|