[Scummvm-git-logs] scummvm startrek-rebased -> 2c2a8391ee46afe4d1a4f1be13d7a6988d3945d9

Drenn1 stewartmatthew6 at gmail.com
Mon May 27 22:29:12 CEST 2019


This automated email contains information about 6 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
109c10794e STARTREK: VENG8
0b75c01adf STARTREK: VENG8 text changes
5673a5a9b7 STARTREK: Common code for VENG mission
b9ca6d2cb6 STARTREK: Saving for VENG mission
2a6ee10182 STARTREK: Bugfix to map preview of republic
2c2a8391ee STARTREK: Fixes to drawR3Shape; red planet renders


Commit: 109c10794e018e9f677e33aa26c42375fa37bfc3
    https://github.com/scummvm/scummvm/commit/109c10794e018e9f677e33aa26c42375fa37bfc3
Author: Matthew Stewart (stewartmatthew6 at gmail.com)
Date: 2019-02-02T12:17:14-05:00

Commit Message:
STARTREK: VENG8

Changed paths:
    engines/startrek/awaymission.h
    engines/startrek/room.h
    engines/startrek/rooms/veng8.cpp
    engines/startrek/text.cpp
    engines/startrek/text.h


diff --git a/engines/startrek/awaymission.h b/engines/startrek/awaymission.h
index 8785979..1b3df61 100644
--- a/engines/startrek/awaymission.h
+++ b/engines/startrek/awaymission.h
@@ -690,7 +690,9 @@ struct AwayMission {
 			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
diff --git a/engines/startrek/room.h b/engines/startrek/room.h
index b6a7d5d..7eaef47 100644
--- a/engines/startrek/room.h
+++ b/engines/startrek/room.h
@@ -2798,6 +2798,46 @@ public:
 
 	// VENG8
 	void veng8Tick1();
+	void veng8WalkToDoor();
+	void veng8ReachedDoor();
+	void veng8DoorOpened();
+	void veng8Timer0Expired();
+	void veng8SparkAnim1Done();
+	void veng8Timer1Expired();
+	void veng8SparkAnim2Done();
+	void veng8LookAtPowerPack();
+	void veng8LookAtDoor();
+	void veng8LookAtPowerCircuits();
+	void veng8LookAtControls();
+	void veng8LookAtDeadGuy();
+	void veng8LookAtSlider();
+	void veng8LookAtKirk();
+	void veng8LookAtSpock();
+	void veng8LookAtMccoy();
+	void veng8LookAtRedshirt();
+	void veng8LookAtTransporter();
+	void veng8LookAnywhere();
+	void veng8TalkToKirk();
+	void veng8TalkToSpock();
+	void veng8TalkToMccoy();
+	void veng8TalkToRedshirt();
+	void veng8UseKirkOnControls();
+	void veng8UseSpockOnControls();
+	void veng8SpockReachedControls();
+	void veng8SpockUsedControls();
+	void veng8UsePowerPackOnPowerCircuit();
+	void veng8SpockReachedPowerCircuit();
+	void veng8SpockConnectedPowerPack();
+	void veng8TransporterPoweredUp();
+	void veng8UseKirkOnSlider();
+	void veng8UseSpockOnSlider();
+	void veng8SpockReachedSlider();
+	void veng8RedshirtReachedTransporter();
+	void veng8SpockPulledSliderToBeamOut();
+	void veng8RedshirtBeamedOut();
+	void veng8SpockPulledSliderToBeamIn();
+	void veng8RedshirtBeamedIn();
+	void veng8UseSTricorderOnConsole();
 
 	// VENGA (common code)
 	void vengaUseMccoyOnDeadGuy();
diff --git a/engines/startrek/rooms/veng8.cpp b/engines/startrek/rooms/veng8.cpp
index d8ad9e0..ac002c0 100644
--- a/engines/startrek/rooms/veng8.cpp
+++ b/engines/startrek/rooms/veng8.cpp
@@ -22,20 +22,356 @@
 
 #include "startrek/room.h"
 
-#define OBJECT_DOOR 8
+#define OBJECT_DEAD_GUY 8 // Unused
+#define OBJECT_POWER_PACK 9
+#define OBJECT_CABLES 10
+#define OBJECT_DOOR 11
+#define OBJECT_CONSOLE_LEFT 12
+#define OBJECT_SPARKS_1 13
+#define OBJECT_SPARKS_2 14
+#define OBJECT_CONTROLS 15
+#define OBJECT_SLIDER 16
 
-#define HOTSPOT_20 0x20
+#define HOTSPOT_SLIDER 0x20
+#define HOTSPOT_CONTROLS 0x21
+#define HOTSPOT_POWER_CIRCUIT 0x22
+#define HOTSPOT_DOOR 0x23
+#define HOTSPOT_TRANSPORTER 0x24
 
 namespace StarTrek {
 
 extern const RoomAction veng8ActionList[] = {
 	{ {ACTION_TICK, 1, 0, 0}, &Room::veng8Tick1 },
+
+	{ {ACTION_WALK, OBJECT_DOOR,  0, 0}, &Room::veng8WalkToDoor },
+	{ {ACTION_WALK, HOTSPOT_DOOR, 0, 0}, &Room::veng8WalkToDoor },
+	{ {ACTION_DONE_WALK, 8,       0, 0}, &Room::veng8ReachedDoor },
+	{ {ACTION_DONE_ANIM, 7,       0, 0}, &Room::veng8DoorOpened },
+	{ {ACTION_TIMER_EXPIRED, 0,   0, 0}, &Room::veng8Timer0Expired },
+	{ {ACTION_DONE_ANIM, 11,      0, 0}, &Room::veng8SparkAnim1Done },
+	{ {ACTION_TIMER_EXPIRED, 1,   0, 0}, &Room::veng8Timer1Expired },
+	{ {ACTION_DONE_ANIM, 12,      0, 0}, &Room::veng8SparkAnim2Done },
+
+	{ {ACTION_LOOK, OBJECT_POWER_PACK,     0, 0}, &Room::veng8LookAtPowerPack },
+	{ {ACTION_LOOK, OBJECT_DOOR,           0, 0}, &Room::veng8LookAtDoor },
+	{ {ACTION_LOOK, HOTSPOT_DOOR,          0, 0}, &Room::veng8LookAtDoor },
+	{ {ACTION_LOOK, HOTSPOT_POWER_CIRCUIT, 0, 0}, &Room::veng8LookAtPowerCircuits },
+	{ {ACTION_LOOK, OBJECT_CONTROLS,       0, 0}, &Room::veng8LookAtControls },
+	{ {ACTION_LOOK, HOTSPOT_CONTROLS,      0, 0}, &Room::veng8LookAtControls },
+	{ {ACTION_LOOK, OBJECT_DEAD_GUY,       0, 0}, &Room::veng8LookAtDeadGuy },
+	{ {ACTION_LOOK, OBJECT_SLIDER,         0, 0}, &Room::veng8LookAtSlider },
+	{ {ACTION_LOOK, HOTSPOT_SLIDER,        0, 0}, &Room::veng8LookAtSlider },
+	{ {ACTION_LOOK, OBJECT_KIRK,           0, 0}, &Room::veng8LookAtKirk },
+	{ {ACTION_LOOK, OBJECT_SPOCK,          0, 0}, &Room::veng8LookAtSpock },
+	{ {ACTION_LOOK, OBJECT_MCCOY,          0, 0}, &Room::veng8LookAtMccoy },
+	{ {ACTION_LOOK, OBJECT_REDSHIRT,       0, 0}, &Room::veng8LookAtRedshirt },
+	{ {ACTION_LOOK, HOTSPOT_TRANSPORTER,   0, 0}, &Room::veng8LookAtTransporter },
+	{ {ACTION_LOOK, 0xff,                  0, 0}, &Room::veng8LookAnywhere },
+	{ {ACTION_TALK, OBJECT_KIRK,           0, 0}, &Room::veng8TalkToKirk },
+	{ {ACTION_TALK, OBJECT_SPOCK,          0, 0}, &Room::veng8TalkToSpock },
+	{ {ACTION_TALK, OBJECT_MCCOY,          0, 0}, &Room::veng8TalkToMccoy },
+	{ {ACTION_TALK, OBJECT_REDSHIRT,       0, 0}, &Room::veng8TalkToRedshirt },
+
+	{ {ACTION_USE, OBJECT_KIRK,  OBJECT_CONTROLS,  0}, &Room::veng8UseKirkOnControls },
+	{ {ACTION_USE, OBJECT_KIRK,  HOTSPOT_CONTROLS, 0}, &Room::veng8UseKirkOnControls },
+	{ {ACTION_USE, OBJECT_SPOCK, OBJECT_CONTROLS,  0}, &Room::veng8UseSpockOnControls },
+	{ {ACTION_USE, OBJECT_SPOCK, HOTSPOT_CONTROLS, 0}, &Room::veng8UseSpockOnControls },
+	{ {ACTION_DONE_WALK, 13,                    0, 0}, &Room::veng8SpockReachedControls },
+	{ {ACTION_DONE_ANIM, 14,                    0, 0}, &Room::veng8SpockUsedControls },
+
+	{ {ACTION_USE, OBJECT_IFUSION, HOTSPOT_POWER_CIRCUIT, 0}, &Room::veng8UsePowerPackOnPowerCircuit },
+	{ {ACTION_DONE_WALK, 9,                            0, 0}, &Room::veng8SpockReachedPowerCircuit },
+	{ {ACTION_DONE_ANIM, 10,                           0, 0}, &Room::veng8SpockConnectedPowerPack },
+	{ {ACTION_DONE_ANIM, 15,                           0, 0}, &Room::veng8TransporterPoweredUp },
+
+	{ {ACTION_USE, OBJECT_KIRK,  OBJECT_SLIDER,  0}, &Room::veng8UseKirkOnSlider },
+	{ {ACTION_USE, OBJECT_KIRK,  HOTSPOT_SLIDER, 0}, &Room::veng8UseKirkOnSlider },
+	{ {ACTION_USE, OBJECT_SPOCK, OBJECT_SLIDER,  0}, &Room::veng8UseSpockOnSlider },
+	{ {ACTION_USE, OBJECT_SPOCK, HOTSPOT_SLIDER, 0}, &Room::veng8UseSpockOnSlider },
+	{ {ACTION_DONE_WALK, 16,                  0, 0}, &Room::veng8SpockReachedSlider },
+	{ {ACTION_DONE_WALK, 1,                   0, 0}, &Room::veng8RedshirtReachedTransporter },
+	{ {ACTION_DONE_WALK, 4,                   0, 0}, &Room::veng8RedshirtReachedTransporter },
+	{ {ACTION_DONE_ANIM, 5,                   0, 0}, &Room::veng8SpockPulledSliderToBeamOut },
+	{ {ACTION_DONE_ANIM, 2,                   0, 0}, &Room::veng8RedshirtBeamedOut },
+	{ {ACTION_DONE_ANIM, 6,                   0, 0}, &Room::veng8SpockPulledSliderToBeamIn },
+	{ {ACTION_DONE_ANIM, 3,                   0, 0}, &Room::veng8RedshirtBeamedIn },
+
+	{ {ACTION_USE, OBJECT_ISTRICOR, OBJECT_CONTROLS,  0}, &Room::veng8UseSTricorderOnConsole },
+	{ {ACTION_USE, OBJECT_ISTRICOR, OBJECT_SLIDER,    0}, &Room::veng8UseSTricorderOnConsole },
+	{ {ACTION_USE, OBJECT_ISTRICOR, HOTSPOT_CONTROLS, 0}, &Room::veng8UseSTricorderOnConsole },
+	{ {ACTION_USE, OBJECT_ISTRICOR, HOTSPOT_SLIDER,   0}, &Room::veng8UseSTricorderOnConsole },
 };
 
 extern const int veng8NumActions = ARRAYSIZE(veng8ActionList);
 
 
 void Room::veng8Tick1() {
+	playVoc("VEN8LOOP");
+
+	if (_awayMission->veng.powerPackPluggedIntoTransporter) {
+		loadActorAnim(OBJECT_POWER_PACK, "s7r8pp", 0x10d, 0xa2);
+		loadActorAnim(OBJECT_CABLES, "s7r8pl", 0x101, 0x97);
+		loadActorAnim(OBJECT_CONSOLE_LEFT, "s7r8t2", 0x3c, 0x9f);
+		loadActorAnim(OBJECT_CONTROLS, "s7r8q1", 0x35, 0xa0);
+		loadActorAnim(OBJECT_SLIDER, "s7r8q2", 0x44, 0xa0);
+	}
+
+	loadActorAnim(OBJECT_DOOR, "s7r8d1c", 0x12c, 0xac);
+	_awayMission->timers[0] = 47;
+	_awayMission->timers[1] = 14;
+}
+
+void Room::veng8WalkToDoor() {
+	walkCrewmanC(OBJECT_KIRK, 0x117, 0xb6, &Room::veng8ReachedDoor);
+}
+
+void Room::veng8ReachedDoor() {
+	_awayMission->disableInput = true;
+	playSoundEffectIndex(SND_DOOR1);
+	loadActorAnimC(OBJECT_DOOR, "s7r8d1", 0x12c, 0xac, &Room::veng8DoorOpened);
+}
+
+void Room::veng8DoorOpened() {
+	walkCrewman(OBJECT_KIRK, 0x134, 0xb6);
+}
+
+void Room::veng8Timer0Expired() { // Create sparks from a console in the ceiling
+	loadActorAnimC(OBJECT_SPARKS_1, "s7r8s1", 0, 0, &Room::veng8SparkAnim1Done);
+}
+
+void Room::veng8SparkAnim1Done() { // Create sparks every 128 ticks
+	_awayMission->timers[0] = 128;
+}
+
+void Room::veng8Timer1Expired() { // Should create sparks, but they're not visible anywhere?
+	loadActorAnimC(OBJECT_SPARKS_2, "s7r8s2", 0, 0, &Room::veng8SparkAnim2Done);
+}
+
+void Room::veng8SparkAnim2Done() {
+	_awayMission->timers[1] = 32;
+}
+
+void Room::veng8LookAtPowerPack() {
+	showText(TX_VEN8N004);
+}
+
+void Room::veng8LookAtDoor() {
+	showText(TX_VEN8N009);
+}
+
+void Room::veng8LookAtPowerCircuits() {
+	showText(TX_VEN8N006);
+}
+
+void Room::veng8LookAtControls() {
+	showText(TX_VEN8N007);
+}
+
+void Room::veng8LookAtDeadGuy() {
+	showText(TX_VEN8N003); // Unused, since the dead guy object isn't drawn
+}
+
+void Room::veng8LookAtSlider() {
+	showText(TX_VEN8N008);
+}
+
+void Room::veng8LookAtKirk() {
+	showText(TX_VEN8N001);
+}
+
+void Room::veng8LookAtSpock() {
+	// NOTE: Potential alternative is VEN8N011
+	showText(TX_VEN5N002);
+}
+
+void Room::veng8LookAtMccoy() {
+	// NOTE: Potential alternative is VEN8N002 (though it doesn't fit very well with this
+	// room, so perhaps the circumstances of this room changed in development)
+	showText(TX_VEN5N004);
+}
+
+void Room::veng8LookAtRedshirt() {
+	showText(TX_VEN8N000);
+}
+
+void Room::veng8LookAtTransporter() {
+	showText(TX_VEN8N010);
+}
+
+void Room::veng8LookAnywhere() {
+	showText(TX_VEN8N005);
+}
+
+void Room::veng8TalkToKirk() {
+	if (_awayMission->veng.torpedoLoaded)
+		showText(TX_SPEAKER_KIRK, TX_VEN8_002);
+	else if (_awayMission->veng.countdownStarted)
+		showText(TX_SPEAKER_KIRK, TX_VEN8_005);
+	else
+		showText(TX_SPEAKER_KIRK, TX_VEN8_006);
+}
+
+void Room::veng8TalkToSpock() {
+	if (_awayMission->veng.torpedoLoaded)
+		showText(TX_SPEAKER_SPOCK, TX_VEN8_032);
+	else if (_awayMission->veng.countdownStarted)
+		showText(TX_SPEAKER_SPOCK, TX_VEN8_029);
+	else
+		showText(TX_SPEAKER_SPOCK, TX_VEN8_028);
+}
+
+void Room::veng8TalkToMccoy() {
+	if (_awayMission->veng.torpedoLoaded) {
+		showText(TX_SPEAKER_MCCOY, TX_VEN8_020);
+		showText(TX_SPEAKER_KIRK,  TX_VEN8_001);
+	} else if (_awayMission->veng.countdownStarted)
+		showText(TX_SPEAKER_MCCOY, TX_VEN8_021);
+	else
+		showText(TX_SPEAKER_MCCOY, TX_VEN8_018);
+}
+
+void Room::veng8TalkToRedshirt() {
+	if (_awayMission->veng.torpedoLoaded) {
+		showText(TX_SPEAKER_KIJE,  TX_VEN8_034);
+		showText(TX_SPEAKER_MCCOY, TX_VEN8_023);
+		showText(TX_SPEAKER_KIJE,  TX_VEN8_036);
+	} else if (_awayMission->veng.countdownStarted)
+		showText(TX_SPEAKER_KIJE, TX_VEN8_041);
+	else
+		showText(TX_SPEAKER_KIJE, TX_VEN8_040);
+}
+
+void Room::veng8UseKirkOnControls() {
+	showText(TX_SPEAKER_KIRK, TX_VEN8_003);
+	veng8UseSpockOnControls();
+}
+
+void Room::veng8UseSpockOnControls() {
+	_awayMission->disableInput = true;
+	walkCrewmanC(OBJECT_SPOCK, 0x37, 0xc4, &Room::veng8SpockReachedControls);
+}
+
+void Room::veng8SpockReachedControls() {
+	loadActorAnimC(OBJECT_SPOCK, "susemn", -1, -1, &Room::veng8SpockUsedControls);
+}
+
+void Room::veng8SpockUsedControls() {
+	_awayMission->disableInput = false;
+
+	if (!_awayMission->veng.powerPackPluggedIntoTransporter && !_awayMission->veng.impulseEnginesOn)
+		showText(TX_SPEAKER_SPOCK, TX_VEN8_026);
+	else if (!_awayMission->veng.powerPackPluggedIntoTransporter && _awayMission->veng.poweredSystem != 3)
+		showText(TX_SPEAKER_SPOCK, TX_VEN8_014);
+	else if (!_awayMission->veng.examinedTorpedoControl)
+		showText(TX_SPEAKER_SPOCK, TX_VEN8_030);
+	else {
+		showText(TX_SPEAKER_SPOCK, TX_VEN8_031);
+		_awayMission->veng.setTransporterCoordinates = true;
+	}
+}
+
+void Room::veng8UsePowerPackOnPowerCircuit() {
+	if (!_awayMission->veng.powerPackPluggedIntoTransporter) {
+		_awayMission->disableInput = true;
+		showText(TX_SPEAKER_KIRK,  TX_VEN8_011);
+		showText(TX_SPEAKER_SPOCK, TX_VEN8_033);
+		showText(TX_SPEAKER_KIRK,  TX_VEN8_009);
+		walkCrewmanC(OBJECT_SPOCK, 0xfa, 0xa4, &Room::veng8SpockReachedPowerCircuit);
+	}
+}
+
+void Room::veng8SpockReachedPowerCircuit() {
+	loadActorAnimC(OBJECT_SPOCK, "susemn", -1, -1, &Room::veng8SpockConnectedPowerPack);
+}
+
+void Room::veng8SpockConnectedPowerPack() {
+	playVoc("MTHTRNSP");
+
+	loadActorAnim(OBJECT_POWER_PACK, "s7r8pp", 0x10d, 0xa2);
+	loadActorAnim(OBJECT_CABLES, "s7r8pl", 0x101, 0x97);
+	loadActorAnimC(OBJECT_CONSOLE_LEFT, "s7r8t1", 0x3c, 0x9f, &Room::veng8TransporterPoweredUp);
+
+	walkCrewman(OBJECT_SPOCK, 0xd4, 0xb2);
+	_awayMission->veng.powerPackPluggedIntoTransporter = true;
+	loseItem(OBJECT_IFUSION);
+	_awayMission->disableInput = false;
+}
+
+void Room::veng8TransporterPoweredUp() {
+	loadActorAnim(OBJECT_CONTROLS, "s7r8q1", 0x35, 0xa0);
+	loadActorAnim(OBJECT_SLIDER, "s7r8q2", 0x44, 0xa0);
+}
+
+void Room::veng8UseKirkOnSlider() {
+	showText(TX_SPEAKER_KIRK, TX_VEN8_004);
+	veng8UseSpockOnSlider();
+}
+
+void Room::veng8UseSpockOnSlider() {
+	_awayMission->disableInput = true;
+	walkCrewmanC(OBJECT_SPOCK, 0x37, 0xc4, &Room::veng8SpockReachedSlider);
+	_awayMission->crewDirectionsAfterWalk[OBJECT_SPOCK] = DIR_N;
+}
+
+void Room::veng8SpockReachedSlider() {
+	_awayMission->disableInput = false;
+
+	if (!_awayMission->veng.powerPackPluggedIntoTransporter && !_awayMission->veng.impulseEnginesOn)
+		showText(TX_SPEAKER_SPOCK, TX_VEN8_027);
+	else if (!_awayMission->veng.powerPackPluggedIntoTransporter && _awayMission->veng.poweredSystem != 3)
+		showText(TX_SPEAKER_SPOCK, TX_VEN8_015);
+	else if (!_awayMission->veng.setTransporterCoordinates) {
+		walkCrewman(OBJECT_SPOCK, 0x98, 0xb6);
+		showText(TX_SPEAKER_SPOCK, TX_VEN8_013);
+	} else if (_awayMission->veng.torpedoLoaded)
+		showText(TX_SPEAKER_KIJE, TX_VEN8_042);
+	else {
+		_awayMission->disableInput = true;
+		showText(TX_SPEAKER_KIRK, TX_VEN8_010);
+		showText(TX_SPEAKER_KIJE, TX_VEN8_035);
+		walkCrewmanC(OBJECT_REDSHIRT, 0xc8, 0x7f, &Room::veng8RedshirtReachedTransporter);
+		_awayMission->crewDirectionsAfterWalk[OBJECT_REDSHIRT] = DIR_S;
+	}
+}
+
+void Room::veng8RedshirtReachedTransporter() {
+	showText(TX_SPEAKER_KIRK, TX_VEN8_009);
+	loadActorAnimC(OBJECT_SPOCK, "susehn", -1, -1, &Room::veng8SpockPulledSliderToBeamOut);
+	playSoundEffectIndex(SND_TRANSENE);
+}
+
+void Room::veng8SpockPulledSliderToBeamOut() {
+	loadActorAnimC(OBJECT_REDSHIRT, "rteled", -1, -1, &Room::veng8RedshirtBeamedOut);
+	playSoundEffectIndex(SND_TRANSDEM);
+	_awayMission->redshirtDead = true;
+}
+
+void Room::veng8RedshirtBeamedOut() {
+	loadActorStandAnim(OBJECT_REDSHIRT);
+	showText(TX_SPEAKER_KIJE, TX_VEN8_037);
+	showText(TX_SPEAKER_KIRK, TX_VEN8_012);
+	showText(TX_SPEAKER_KIJE, TX_VEN8_039);
+	showText(TX_SPEAKER_KIRK, TX_VEN8_008);
+	showText(TX_SPEAKER_KIJE, TX_VEN8_038);
+	showText(TX_SPEAKER_KIRK, TX_VEN8_007);
+	loadActorAnimC(OBJECT_SPOCK, "susehn", -1, -1, &Room::veng8SpockPulledSliderToBeamIn);
+	playSoundEffectIndex(SND_TRANSENE);
+}
+
+void Room::veng8SpockPulledSliderToBeamIn() {
+	_awayMission->redshirtDead = false;
+	loadActorAnimC(OBJECT_REDSHIRT, "rtele", 0xc8, 0x81, &Room::veng8RedshirtBeamedIn);
+	playSoundEffectIndex(SND_TRANSMAT);
+}
+
+void Room::veng8RedshirtBeamedIn() {
+	walkCrewman(OBJECT_REDSHIRT, 0xba, 0xb2);
+	_awayMission->disableInput = false;
+	_awayMission->veng.torpedoLoaded = true;
+}
+
+void Room::veng8UseSTricorderOnConsole() {
+	spockScan(DIR_S, TX_VEN8_025);
 }
 
 }
diff --git a/engines/startrek/text.cpp b/engines/startrek/text.cpp
index c30532e..d3f4d1c 100644
--- a/engines/startrek/text.cpp
+++ b/engines/startrek/text.cpp
@@ -3119,6 +3119,57 @@ extern const char *const g_gameStrings[] = {
 	"#VEN7\\VEN7N009#You pick up a length of cable.",
 
 
+	"#VEN8\\VEN8_001#Let's get back to auxiliary control and give them our... information.",
+	"#VEN8\\VEN8_002#Now, let's give the Elasi something to remember us by.",
+	"#VEN8\\VEN8_003#Spock, please check out the transporter.",
+	"#VEN8\\VEN8_004#Spock, please check out the transporter.",
+	"#VEN8\\VEN8_005#This is it. We know what we have to do.",
+	"#VEN8\\VEN8_006#This room's in pretty good condition compared to the rest of the ship.",
+	"#VEN8\\VEN8_007#Beam him back, Spock.",
+	"#VEN8\\VEN8_008#Do it, Ensign.  We'll just have to gamble that the system doesn't jam again.",
+	"#VEN8\\VEN8_009#Do it, Spock.",
+	"#VEN8\\VEN8_010#Ensign Kije, I want you to beam into the torpedo bay and unjam the loading mechanism. If you don't succeed, we'll all be on permanent shoreleave in an Elasi jail.",
+	"#VEN8\\VEN8_011#Spock, would it be possible to connect the fusion power pack directly into the transporter power circuits?",
+	"#VEN8\\VEN8_012#What's causing the malfunction in the loading mechanism?",
+	"#VEN8\\VEN8_013#Captain, there are no coordinates set for the transporter.",
+	"#VEN8\\VEN8_014#Captain, there is no power allocated to the transporter.",
+	"#VEN8\\VEN8_015#Captain, there is no power allocated to the transporter.",
+	"#VEN8\\VEN8_016#Don't look at me, Jim. You know how much I hate that thing.",
+	"#VEN8\\VEN8_018#Oh, great, my favorite place in the ship. Wouldn't you know it would be in the best shape.",
+	"#VEN8\\VEN8_020#Shall we give the Elasi our transmission, Jim?",
+	"#VEN8\\VEN8_021#We don't have much time!",
+	"#VEN8\\VEN8_023#No, you did \"well\", ensign.",
+	"#VEN8\\VEN8_024#I recommend I stay behind, Captain. If there is a problem with the transporter, I am the most qualified to repair it.",
+	"#VEN8\\VEN8_025#Surprisingly, the transporter controls have escaped damage.",
+	"#VEN8\\VEN8_026#The impulse engines are not generating any power for this system.",
+	"#VEN8\\VEN8_027#The impulse engines are not generating any power for this system.",
+	"#VEN8\\VEN8_028#The transporter pads seem intact, Captain.",
+	"#VEN8\\VEN8_029#This is the only access to the torpedo bay, Captain.",
+	"#VEN8\\VEN8_030#This unit is fully functional. But I do not see the logic in using it at this time, Captain. The Enterprise is out of range for transport.",
+	"#VEN8\\VEN8_031#Transporter systems are operational, Captain. Coordinates have been set to the Photon Torpedo Loading bay.",
+	"#VEN8\\VEN8_032#A very efficient job, Captain.",
+	"#VEN8\\VEN8_033#Fascinating. It can be done. However, the transporter will only be able to transport a single person.",
+	"#VEN8\\VEN8_034#I did good, didn't I sir?",
+	"#VEN8\\VEN8_035#I'll do my best, Sir.",
+	"#VEN8\\VEN8_036#I'm a security officer, not a grammarian.",
+	"#VEN8\\VEN8_037#I've reached the torpedo loading bay, Captain. Its not too badly damaged, fortunately.",
+	"#VEN8\\VEN8_038#The door's open, Captain. I'm ready to transport back.",
+	"#VEN8\\VEN8_039#The inner loading door is stuck in the closed position. I can force it open, but when the loading cycle is begun, the room will lose pressure.  We won't be able to beam back here again.",
+	"#VEN8\\VEN8_040#I have a bad feeling about this place.",
+	"#VEN8\\VEN8_041#Ready for your orders, sir.",
+	"#VEN8\\VEN8_042#There is no need to go back to the torpedo bay, Captain. I can assure you that it is unjammed.",
+	"#VEN8\\VEN8N000#Kije is eager to perform his duties.",
+	"#VEN8\\VEN8N001#Kirk is extremely worried.",
+	"#VEN8\\VEN8N003#The former transporter chief of the U.S.S. Republic.",
+	"#VEN8\\VEN8N004#The Fusion power pack is rigged into the transporter power circuits.",
+	"#VEN8\\VEN8N005#The transporter room appears to have escaped serious damage.",
+	"#VEN8\\VEN8N006#These are the power conduits for the transporter system.",
+	"#VEN8\\VEN8N007#These controls set the coordinates for the transporter.",
+	"#VEN8\\VEN8N008#These sliders activate the transporter systems.",
+	"#VEN8\\VEN8N009#This door leads back to the corridor and turbolift 2.",
+	"#VEN8\\VEN8N010#This is the transporter chamber. The pads do not seem to be damaged.",
+
+
 	"#VENA\\VENA_F32#The landing party has been taken captive by the Elasi, and you know Starfleet does not negotiate with terrorists. As you look forward to a long captivity you wonder who will take command of the Enterprise. Better luck next time.",
 	"#VENA\\VENA_F34#Captain, it would be unwise to use your phaser considering the already extensive damage sustained by the Republic.",
 	"#VENA\\VENA_F40#The Elasi fire photon torpedoes. The Republic has been destroyed.",
diff --git a/engines/startrek/text.h b/engines/startrek/text.h
index cf0efa0..1d19c55 100644
--- a/engines/startrek/text.h
+++ b/engines/startrek/text.h
@@ -3249,6 +3249,62 @@ enum GameStringIDs {
 	TX_VEN7N009,
 
 
+	TX_VEN8_001,
+	TX_VEN8_002,
+	TX_VEN8_003,
+	TX_VEN8_004,
+	TX_VEN8_005,
+	TX_VEN8_006,
+	TX_VEN8_007,
+	TX_VEN8_008,
+	TX_VEN8_009,
+	TX_VEN8_010,
+	TX_VEN8_011,
+	TX_VEN8_012,
+	TX_VEN8_013,
+	TX_VEN8_014,
+	TX_VEN8_015,
+	TX_VEN8_016, // UNUSED
+	// UNUSED
+	TX_VEN8_018,
+	// UNUSED
+	TX_VEN8_020,
+	TX_VEN8_021,
+	// UNUSED
+	TX_VEN8_023,
+	TX_VEN8_024, // UNUSED
+	TX_VEN8_025,
+	TX_VEN8_026,
+	TX_VEN8_027,
+	TX_VEN8_028,
+	TX_VEN8_029,
+	TX_VEN8_030,
+	TX_VEN8_031,
+	TX_VEN8_032,
+	TX_VEN8_033,
+	TX_VEN8_034,
+	TX_VEN8_035,
+	TX_VEN8_036,
+	TX_VEN8_037,
+	TX_VEN8_038,
+	TX_VEN8_039,
+	TX_VEN8_040,
+	TX_VEN8_041,
+	TX_VEN8_042,
+	TX_VEN8N000,
+	TX_VEN8N001,
+	// UNUSED
+	TX_VEN8N003,
+	TX_VEN8N004,
+	TX_VEN8N005,
+	TX_VEN8N006,
+	TX_VEN8N007,
+	TX_VEN8N008,
+	TX_VEN8N009,
+	TX_VEN8N010,
+	// UNUSED (N011)
+
+
 	TX_VENA_F32,
 	TX_VENA_F34,
 	TX_VENA_F40,


Commit: 0b75c01adfff30fb1252014fd5f3ffd60d90897a
    https://github.com/scummvm/scummvm/commit/0b75c01adfff30fb1252014fd5f3ffd60d90897a
Author: Matthew Stewart (stewartmatthew6 at gmail.com)
Date: 2019-02-02T12:17:14-05:00

Commit Message:
STARTREK: VENG8 text changes

Changed paths:
    engines/startrek/text.cpp


diff --git a/engines/startrek/text.cpp b/engines/startrek/text.cpp
index d3f4d1c..5ec0d31 100644
--- a/engines/startrek/text.cpp
+++ b/engines/startrek/text.cpp
@@ -3152,7 +3152,7 @@ extern const char *const g_gameStrings[] = {
 	"#VEN8\\VEN8_034#I did good, didn't I sir?",
 	"#VEN8\\VEN8_035#I'll do my best, Sir.",
 	"#VEN8\\VEN8_036#I'm a security officer, not a grammarian.",
-	"#VEN8\\VEN8_037#I've reached the torpedo loading bay, Captain. Its not too badly damaged, fortunately.",
+	"#VEN8\\VEN8_037#I've reached the torpedo loading bay, Captain. It's not too badly damaged, fortunately.", // TYPO
 	"#VEN8\\VEN8_038#The door's open, Captain. I'm ready to transport back.",
 	"#VEN8\\VEN8_039#The inner loading door is stuck in the closed position. I can force it open, but when the loading cycle is begun, the room will lose pressure.  We won't be able to beam back here again.",
 	"#VEN8\\VEN8_040#I have a bad feeling about this place.",


Commit: 5673a5a9b748dfd433842845f1aba1648eeccc98
    https://github.com/scummvm/scummvm/commit/5673a5a9b748dfd433842845f1aba1648eeccc98
Author: Matthew Stewart (stewartmatthew6 at gmail.com)
Date: 2019-02-02T12:17:14-05:00

Commit Message:
STARTREK: Common code for VENG mission

Changed paths:
    engines/startrek/awaymission.h
    engines/startrek/room.h
    engines/startrek/rooms/veng0.cpp
    engines/startrek/rooms/veng1.cpp
    engines/startrek/rooms/veng2.cpp
    engines/startrek/rooms/veng3.cpp
    engines/startrek/rooms/veng4.cpp
    engines/startrek/rooms/veng5.cpp
    engines/startrek/rooms/veng6.cpp
    engines/startrek/rooms/veng7.cpp
    engines/startrek/rooms/veng8.cpp
    engines/startrek/rooms/venga.cpp


diff --git a/engines/startrek/awaymission.h b/engines/startrek/awaymission.h
index 1b3df61..0375827 100644
--- a/engines/startrek/awaymission.h
+++ b/engines/startrek/awaymission.h
@@ -636,7 +636,7 @@ struct AwayMission {
 			// 2: beam taken
 			byte beamState; // 0x35
 
-			bool field36; // 0x36
+			bool enterpriseLeftForDistressCall; // 0x36
 			bool openedPanel; // 0x37
 			bool clearedPanelDebris; // 0x38
 			bool removedPanelDebris; // 0x39
@@ -665,10 +665,24 @@ struct AwayMission {
 			bool scannedMainComputer; // 0x46
 			bool elasiHailedRepublic; // 0x47
 			bool tookRecordDeckFromAuxilaryControl; // 0x48
-			int16 field49; // 0x49
-			int16 field4b; // 0x4b
-			int16 field4d; // 0x4d
-			int16 field51; // 0x51
+
+			// 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
diff --git a/engines/startrek/room.h b/engines/startrek/room.h
index 7eaef47..6f84fab 100644
--- a/engines/startrek/room.h
+++ b/engines/startrek/room.h
@@ -2476,7 +2476,6 @@ public:
 	void veng0UseMccoyOnLivingCrewman();
 	void veng0MccoyReachedCrewman();
 	void veng0MccoyScannedCrewman();
-	// TODO: common code
 
 	// VENG1
 	void veng1Tick1();
@@ -2523,7 +2522,6 @@ public:
 	void veng1GetDebris();
 	void veng1ReachedDebrisToGet();
 	void veng1TriedToGetDebris();
-	// TODO: common code
 
 	// VENG2
 	void veng2Tick1();
@@ -2590,7 +2588,6 @@ public:
 	void veng2GetMTricorder();
 	void veng2ReachedMTricorderToGet();
 	void veng2PickedUpMTricorder();
-	// TODO: common code
 
 	// VENG3
 	void veng3Tick1();
@@ -2636,7 +2633,6 @@ public:
 	void veng3GetCable();
 	void veng3ReachedCable();
 	void veng3PickedUpCable();
-	// TODO: Common code
 
 	// VENG4
 	void veng4Tick1();
@@ -2664,7 +2660,7 @@ public:
 	void veng4LookAtLeftBedReadings();
 	void veng4LookAtBrittany();
 	void veng4LookAtDrill();
-	void veng4LookAtHypo();
+	void veng4LookAtHypoOnTable();
 	void veng4LookAtDoorObject();
 	void veng4LookAnywhere();
 	void veng4GetHypo();
@@ -2675,7 +2671,6 @@ public:
 	void veng4PickedUpDrill();
 	void veng4TouchedHotspot0();
 	void veng4WalkToDoor();
-	// TODO: common code
 
 	// VENG5
 	void veng5Tick1();
@@ -2712,7 +2707,6 @@ public:
 	void veng5GetPowerPack();
 	void veng5ReachedPowerPack();
 	void veng5PickedUpPowerPack();
-	// TODO: common code
 
 	// VENG6
 	void veng6Tick1();
@@ -2768,7 +2762,6 @@ public:
 	void veng6GetEngineeringJournal();
 	void veng6ReachedEngineeringJournal();
 	void veng6TookEngineeringJournal();
-	// TODO: common code
 
 	// VENG7
 	void veng7Tick1();
@@ -2794,7 +2787,6 @@ public:
 	void veng7GetCable();
 	void veng7ReachedCable();
 	void veng7PickedUpCable();
-	// TODO: common code
 
 	// VENG8
 	void veng8Tick1();
@@ -2840,6 +2832,11 @@ public:
 	void veng8UseSTricorderOnConsole();
 
 	// VENGA (common code)
+	void vengaTick();
+	void vengaElasiBeamOver();
+	void vengaUsePhaserAnywhere();
+	void vengaLookAtHypo();
+	void vengaUseCommunicator();
 	void vengaUseMccoyOnDeadGuy();
 
 public:
diff --git a/engines/startrek/rooms/veng0.cpp b/engines/startrek/rooms/veng0.cpp
index 0e7b544..fe5ae7f 100644
--- a/engines/startrek/rooms/veng0.cpp
+++ b/engines/startrek/rooms/veng0.cpp
@@ -97,6 +97,13 @@ extern const RoomAction veng0ActionList[] = {
 	{ {ACTION_USE, OBJECT_MCCOY,    HOTSPOT_CREWMAN_1, 0}, &Room::veng0UseMccoyOnLivingCrewman },
 	{ {ACTION_DONE_WALK, 3,                         0, 0}, &Room::veng0MccoyReachedCrewman },
 	{ {ACTION_DONE_ANIM, 1,                         0, 0}, &Room::veng0MccoyScannedCrewman },
+
+	// Common code
+	{ {ACTION_TICK, 0xff, 0xff, 0xff}, &Room::vengaTick },
+	{ {ACTION_USE, OBJECT_IPHASERS, 0xff,     0}, &Room::vengaUsePhaserAnywhere },
+	{ {ACTION_USE, OBJECT_IPHASERK, 0xff,     0}, &Room::vengaUsePhaserAnywhere },
+	{ {ACTION_LOOK, OBJECT_IHYPO,          0, 0}, &Room::vengaLookAtHypo },
+	{ {ACTION_USE, OBJECT_ICOMM, OBJECT_KIRK, 0}, &Room::vengaUseCommunicator },
 };
 
 extern const int veng0NumActions = ARRAYSIZE(veng0ActionList);
@@ -138,7 +145,7 @@ void Room::veng0Tick50() {
 		showText(TX_SPEAKER_KIRK,  TX_VEN0_011);
 		showText(TX_SPEAKER_KIRK,  TX_VEN0_010);
 		showText(TX_SPEAKER_MCCOY, TX_VEN0_017);
-		_awayMission->veng.field36 = true;
+		_awayMission->veng.enterpriseLeftForDistressCall = true;
 	}
 }
 
diff --git a/engines/startrek/rooms/veng1.cpp b/engines/startrek/rooms/veng1.cpp
index e683458..a90a396 100644
--- a/engines/startrek/rooms/veng1.cpp
+++ b/engines/startrek/rooms/veng1.cpp
@@ -117,6 +117,11 @@ extern const RoomAction veng1ActionList[] = {
 	{ {ACTION_DONE_ANIM, 12,      0, 0}, &Room::veng1TriedToGetDebris },
 
 	// Common code
+	{ {ACTION_TICK, 0xff, 0xff, 0xff}, &Room::vengaTick },
+	{ {ACTION_USE, OBJECT_IPHASERS, 0xff,     0}, &Room::vengaUsePhaserAnywhere },
+	{ {ACTION_USE, OBJECT_IPHASERK, 0xff,     0}, &Room::vengaUsePhaserAnywhere },
+	{ {ACTION_LOOK, OBJECT_IHYPO,          0, 0}, &Room::vengaLookAtHypo },
+	{ {ACTION_USE, OBJECT_ICOMM, OBJECT_KIRK, 0}, &Room::vengaUseCommunicator },
 	{ {ACTION_USE, OBJECT_IMEDKIT,  OBJECT_DEAD_GUY, 0}, &Room::vengaUseMccoyOnDeadGuy },
 	{ {ACTION_USE, OBJECT_IMTRICOR, OBJECT_DEAD_GUY, 0}, &Room::vengaUseMccoyOnDeadGuy },
 	{ {ACTION_USE, OBJECT_MCCOY,    OBJECT_DEAD_GUY, 0}, &Room::vengaUseMccoyOnDeadGuy },
diff --git a/engines/startrek/rooms/veng2.cpp b/engines/startrek/rooms/veng2.cpp
index c00c346..139142d 100644
--- a/engines/startrek/rooms/veng2.cpp
+++ b/engines/startrek/rooms/veng2.cpp
@@ -169,6 +169,12 @@ extern const RoomAction veng2ActionList[] = {
 	{ {ACTION_DONE_WALK, 16,          0, 0}, &Room::veng2ReachedMTricorderToGet },
 	{ {ACTION_DONE_ANIM, 17,          0, 0}, &Room::veng2PickedUpMTricorder },
 
+	// Common code
+	{ {ACTION_TICK, 0xff, 0xff, 0xff}, &Room::vengaTick },
+	{ {ACTION_USE, OBJECT_IPHASERS, 0xff,     0}, &Room::vengaUsePhaserAnywhere },
+	{ {ACTION_USE, OBJECT_IPHASERK, 0xff,     0}, &Room::vengaUsePhaserAnywhere },
+	{ {ACTION_LOOK, OBJECT_IHYPO,          0, 0}, &Room::vengaLookAtHypo },
+
 	// ENHANCEMENTs
 	{ {ACTION_USE, OBJECT_KIRK, HOTSPOT_TORPEDO_CONTROL,     0}, &Room::veng2UseKirkOnTorpedoButton },
 	// TODO: uncomment
@@ -256,7 +262,7 @@ void Room::veng2ElasiShipDecloaked() {
 	showText(TX_SPEAKER_MCCOY, TX_VEN2_042);
 	if (_awayMission->veng.poweredSystem != 2) {
 		showText(TX_SPEAKER_SPOCK, TX_VEN2_032);
-		_awayMission->veng.field49 = 1800;
+		_awayMission->veng.counterUntilElasiBoardWithShieldsDown = 1800;
 	} else
 		veng2Timer2Expired();
 }
@@ -300,7 +306,7 @@ void Room::veng2Timer2Expired() { // Elasi hail the Enterprise if they haven't a
 	showText(TX_SPEAKER_KIRK,          TX_VEN2_022);
 
 	loadActorAnim2(OBJECT_VIEWSCREEN, "s7r2u2", VIEWSCREEN_X, VIEWSCREEN_Y);
-	_awayMission->veng.field4b = 27000;
+	_awayMission->veng.counterUntilElasiAttack = 27000;
 	_awayMission->veng.countdownStarted = true;
 }
 
@@ -531,7 +537,7 @@ void Room::veng2UseCommunicator() {
 					showText(TX_SPEAKER_ELASI_CAPTAIN, TX_VEN2_114);
 					showText(TX_SPEAKER_KIRK, TX_VEN2_025);
 					loadActorAnim2(OBJECT_VIEWSCREEN, "s7r2u2", VIEWSCREEN_X, VIEWSCREEN_Y);
-					_awayMission->veng.field4d = 1800;
+					_awayMission->veng.counterUntilElasiNagToDisableShields = 1800;
 					_awayMission->veng.toldElasiToBeamOver = true;
 				}
 			}
@@ -689,11 +695,11 @@ powerWeapons:
 			if (_awayMission->veng.toldElasiToBeamOver) {
 				showText(TX_SPEAKER_SPOCK, TX_VEN2_052);
 				_awayMission->veng.elasiShieldsDown = true;
-				_awayMission->veng.field51 = 900;
+				_awayMission->veng.counterUntilElasiBoardWithInvitation = 900;
 			}
 			if (_awayMission->veng.elasiShipDecloaked && !_awayMission->veng.elasiHailedRepublic) {
 				showText(TX_SPEAKER_SPOCK, TX_VEN2_033);
-				_awayMission->veng.field49 = 1800;
+				_awayMission->veng.counterUntilElasiBoardWithShieldsDown = 1800;
 			}
 		} else if (_awayMission->veng.countdownStarted)
 			showText(TX_SPEAKER_SPOCK, TX_VEN2_035);
@@ -731,7 +737,7 @@ powerWeapons:
 			showText(TX_SPEAKER_KIJE, TX_VEN2_087);
 			if (_awayMission->veng.elasiShipDecloaked && !_awayMission->veng.elasiHailedRepublic) {
 				showText(TX_SPEAKER_SPOCK, TX_VEN2_071);
-				_awayMission->veng.field49 = 1800;
+				_awayMission->veng.counterUntilElasiBoardWithShieldsDown = 1800;
 			}
 		}
 	}
diff --git a/engines/startrek/rooms/veng3.cpp b/engines/startrek/rooms/veng3.cpp
index 969a8a1..8c71086 100644
--- a/engines/startrek/rooms/veng3.cpp
+++ b/engines/startrek/rooms/veng3.cpp
@@ -92,6 +92,11 @@ extern const RoomAction veng3ActionList[] = {
 	{ {ACTION_DONE_ANIM, 12,                   0, 0}, &Room::veng3PickedUpCable },
 
 	// Common code
+	{ {ACTION_TICK, 0xff, 0xff, 0xff}, &Room::vengaTick },
+	{ {ACTION_USE, OBJECT_IPHASERS, 0xff,     0}, &Room::vengaUsePhaserAnywhere },
+	{ {ACTION_USE, OBJECT_IPHASERK, 0xff,     0}, &Room::vengaUsePhaserAnywhere },
+	{ {ACTION_LOOK, OBJECT_IHYPO,          0, 0}, &Room::vengaLookAtHypo },
+	{ {ACTION_USE, OBJECT_ICOMM, OBJECT_KIRK, 0}, &Room::vengaUseCommunicator },
 	{ {ACTION_USE, OBJECT_IMEDKIT,  OBJECT_DEAD_GUY, 0}, &Room::vengaUseMccoyOnDeadGuy },
 	{ {ACTION_USE, OBJECT_IMTRICOR, OBJECT_DEAD_GUY, 0}, &Room::vengaUseMccoyOnDeadGuy },
 	{ {ACTION_USE, OBJECT_MCCOY,    OBJECT_DEAD_GUY, 0}, &Room::vengaUseMccoyOnDeadGuy },
diff --git a/engines/startrek/rooms/veng4.cpp b/engines/startrek/rooms/veng4.cpp
index 2c3f8f2..b98ffcb 100644
--- a/engines/startrek/rooms/veng4.cpp
+++ b/engines/startrek/rooms/veng4.cpp
@@ -70,8 +70,8 @@ extern const RoomAction veng4ActionList[] = {
 
 	{ {ACTION_USE,  OBJECT_ISTRICOR, OBJECT_DRILL, 0}, &Room::veng4LookAtDrill },
 	{ {ACTION_LOOK, OBJECT_DRILL,               0, 0}, &Room::veng4LookAtDrill },
-	{ {ACTION_USE,  OBJECT_ISTRICOR, OBJECT_HYPO,  0}, &Room::veng4LookAtHypo },
-	{ {ACTION_LOOK, OBJECT_HYPO,                0, 0}, &Room::veng4LookAtHypo },
+	{ {ACTION_USE,  OBJECT_ISTRICOR, OBJECT_HYPO,  0}, &Room::veng4LookAtHypoOnTable },
+	{ {ACTION_LOOK, OBJECT_HYPO,                0, 0}, &Room::veng4LookAtHypoOnTable },
 	{ {ACTION_LOOK, OBJECT_DOOR,                0, 0}, &Room::veng4LookAtDoorObject },
 	{ {ACTION_LOOK, 0xff,                       0, 0}, &Room::veng4LookAnywhere },
 
@@ -87,6 +87,13 @@ extern const RoomAction veng4ActionList[] = {
 	{ {ACTION_WALK, OBJECT_DOOR,  0, 0}, &Room::veng4WalkToDoor },
 	{ {ACTION_WALK, HOTSPOT_DOOR, 0, 0}, &Room::veng4WalkToDoor },
 
+	// Common code
+	{ {ACTION_TICK, 0xff, 0xff, 0xff}, &Room::vengaTick },
+	{ {ACTION_USE, OBJECT_IPHASERS, 0xff,     0}, &Room::vengaUsePhaserAnywhere },
+	{ {ACTION_USE, OBJECT_IPHASERK, 0xff,     0}, &Room::vengaUsePhaserAnywhere },
+	{ {ACTION_LOOK, OBJECT_IHYPO,          0, 0}, &Room::vengaLookAtHypo },
+	{ {ACTION_USE, OBJECT_ICOMM, OBJECT_KIRK, 0}, &Room::vengaUseCommunicator },
+
 	// ENHANCEMENT (let object count for the "look" action, not just the hotspot)
 	{ {ACTION_LOOK, OBJECT_LEFT_READINGS, 0, 0}, &Room::veng4LookAtLeftBedReadings },
 };
@@ -288,7 +295,7 @@ void Room::veng4LookAtDrill() {
 	showText(TX_VEN4N012);
 }
 
-void Room::veng4LookAtHypo() {
+void Room::veng4LookAtHypoOnTable() {
 	showText(TX_VEN4N010);
 }
 
diff --git a/engines/startrek/rooms/veng5.cpp b/engines/startrek/rooms/veng5.cpp
index 52bf7ea..23a7cd2 100644
--- a/engines/startrek/rooms/veng5.cpp
+++ b/engines/startrek/rooms/veng5.cpp
@@ -78,6 +78,11 @@ extern const RoomAction veng5ActionList[] = {
 	{ {ACTION_DONE_ANIM, 7,           0, 0}, &Room::veng5PickedUpPowerPack },
 
 	// Common code
+	{ {ACTION_TICK, 0xff, 0xff, 0xff}, &Room::vengaTick },
+	{ {ACTION_USE, OBJECT_IPHASERS, 0xff,     0}, &Room::vengaUsePhaserAnywhere },
+	{ {ACTION_USE, OBJECT_IPHASERK, 0xff,     0}, &Room::vengaUsePhaserAnywhere },
+	{ {ACTION_LOOK, OBJECT_IHYPO,          0, 0}, &Room::vengaLookAtHypo },
+	{ {ACTION_USE, OBJECT_ICOMM, OBJECT_KIRK, 0}, &Room::vengaUseCommunicator },
 	{ {ACTION_USE, OBJECT_IMEDKIT,  OBJECT_DEAD_GUY, 0}, &Room::vengaUseMccoyOnDeadGuy },
 	{ {ACTION_USE, OBJECT_IMTRICOR, OBJECT_DEAD_GUY, 0}, &Room::vengaUseMccoyOnDeadGuy },
 	{ {ACTION_USE, OBJECT_MCCOY,    OBJECT_DEAD_GUY, 0}, &Room::vengaUseMccoyOnDeadGuy },
diff --git a/engines/startrek/rooms/veng6.cpp b/engines/startrek/rooms/veng6.cpp
index e822742..b7bb549 100644
--- a/engines/startrek/rooms/veng6.cpp
+++ b/engines/startrek/rooms/veng6.cpp
@@ -118,6 +118,11 @@ extern const RoomAction veng6ActionList[] = {
 	{ {ACTION_DONE_ANIM, 12,                              0, 0}, &Room::veng6TookEngineeringJournal },
 
 	// Common code
+	{ {ACTION_TICK, 0xff, 0xff, 0xff}, &Room::vengaTick },
+	{ {ACTION_USE, OBJECT_IPHASERS, 0xff,     0}, &Room::vengaUsePhaserAnywhere },
+	{ {ACTION_USE, OBJECT_IPHASERK, 0xff,     0}, &Room::vengaUsePhaserAnywhere },
+	{ {ACTION_LOOK, OBJECT_IHYPO,          0, 0}, &Room::vengaLookAtHypo },
+	{ {ACTION_USE, OBJECT_ICOMM, OBJECT_KIRK, 0}, &Room::vengaUseCommunicator },
 	{ {ACTION_USE, OBJECT_IMEDKIT,  OBJECT_DEAD_GUY, 0}, &Room::vengaUseMccoyOnDeadGuy },
 	{ {ACTION_USE, OBJECT_IMTRICOR, OBJECT_DEAD_GUY, 0}, &Room::vengaUseMccoyOnDeadGuy },
 	{ {ACTION_USE, OBJECT_MCCOY,    OBJECT_DEAD_GUY, 0}, &Room::vengaUseMccoyOnDeadGuy },
diff --git a/engines/startrek/rooms/veng7.cpp b/engines/startrek/rooms/veng7.cpp
index 3ba673e..3dafb08 100644
--- a/engines/startrek/rooms/veng7.cpp
+++ b/engines/startrek/rooms/veng7.cpp
@@ -63,6 +63,11 @@ extern const RoomAction veng7ActionList[] = {
 	{ {ACTION_DONE_ANIM, 4,       0, 0}, &Room::veng7PickedUpCable },
 
 	// Common code
+	{ {ACTION_TICK, 0xff, 0xff, 0xff}, &Room::vengaTick },
+	{ {ACTION_USE, OBJECT_IPHASERS, 0xff,     0}, &Room::vengaUsePhaserAnywhere },
+	{ {ACTION_USE, OBJECT_IPHASERK, 0xff,     0}, &Room::vengaUsePhaserAnywhere },
+	{ {ACTION_LOOK, OBJECT_IHYPO,          0, 0}, &Room::vengaLookAtHypo },
+	{ {ACTION_USE, OBJECT_ICOMM, OBJECT_KIRK, 0}, &Room::vengaUseCommunicator },
 	{ {ACTION_USE, OBJECT_IMEDKIT,  OBJECT_DEAD_GUY, 0}, &Room::vengaUseMccoyOnDeadGuy },
 	{ {ACTION_USE, OBJECT_IMTRICOR, OBJECT_DEAD_GUY, 0}, &Room::vengaUseMccoyOnDeadGuy },
 	{ {ACTION_USE, OBJECT_MCCOY,    OBJECT_DEAD_GUY, 0}, &Room::vengaUseMccoyOnDeadGuy },
diff --git a/engines/startrek/rooms/veng8.cpp b/engines/startrek/rooms/veng8.cpp
index ac002c0..0712bdf 100644
--- a/engines/startrek/rooms/veng8.cpp
+++ b/engines/startrek/rooms/veng8.cpp
@@ -100,6 +100,13 @@ extern const RoomAction veng8ActionList[] = {
 	{ {ACTION_USE, OBJECT_ISTRICOR, OBJECT_SLIDER,    0}, &Room::veng8UseSTricorderOnConsole },
 	{ {ACTION_USE, OBJECT_ISTRICOR, HOTSPOT_CONTROLS, 0}, &Room::veng8UseSTricorderOnConsole },
 	{ {ACTION_USE, OBJECT_ISTRICOR, HOTSPOT_SLIDER,   0}, &Room::veng8UseSTricorderOnConsole },
+
+	// Common code
+	{ {ACTION_TICK, 0xff, 0xff, 0xff}, &Room::vengaTick },
+	{ {ACTION_USE, OBJECT_IPHASERS, 0xff,     0}, &Room::vengaUsePhaserAnywhere },
+	{ {ACTION_USE, OBJECT_IPHASERK, 0xff,     0}, &Room::vengaUsePhaserAnywhere },
+	{ {ACTION_LOOK, OBJECT_IHYPO,          0, 0}, &Room::vengaLookAtHypo },
+	{ {ACTION_USE, OBJECT_ICOMM, OBJECT_KIRK, 0}, &Room::vengaUseCommunicator },
 };
 
 extern const int veng8NumActions = ARRAYSIZE(veng8ActionList);
diff --git a/engines/startrek/rooms/venga.cpp b/engines/startrek/rooms/venga.cpp
index 0110331..5922d52 100644
--- a/engines/startrek/rooms/venga.cpp
+++ b/engines/startrek/rooms/venga.cpp
@@ -24,6 +24,84 @@
 
 namespace StarTrek {
 
+void Room::vengaTick() {
+	if (_awayMission->veng.counterUntilElasiBoardWithShieldsDown != 0) {
+		_awayMission->veng.counterUntilElasiBoardWithShieldsDown--;
+		if (_awayMission->veng.counterUntilElasiBoardWithShieldsDown == 0 && _awayMission->veng.poweredSystem != 2) {
+			vengaElasiBeamOver();
+			return;
+		}
+	}
+
+	if (_awayMission->veng.counterUntilElasiAttack != 0) {
+		_awayMission->veng.counterUntilElasiAttack--;
+		if (_awayMission->veng.counterUntilElasiAttack == 0 && !_awayMission->veng.toldElasiToBeamOver) {
+			// BUG: Message should say that they destroyed the ship, since shields are
+			// probably up right now...
+			vengaElasiBeamOver();
+			return;
+		}
+	}
+
+	if (_awayMission->veng.counterUntilElasiNagToDisableShields != 0) {
+		_awayMission->veng.counterUntilElasiNagToDisableShields--;
+		if (_awayMission->veng.counterUntilElasiNagToDisableShields == 0 && !_awayMission->veng.firedTorpedo) {
+			// Elasi tells you to lower your shields already.
+			// BUG: Should add a check to above condition that shields aren't down
+			// already?
+			showText(TX_SPEAKER_ELASI_CAPTAIN, TX_VEN2_098);
+			_awayMission->veng.counterUntilElasiDestroyShip = 2700;
+		}
+	}
+
+	if (_awayMission->veng.counterUntilElasiDestroyShip != 0) {
+		_awayMission->veng.counterUntilElasiDestroyShip--;
+		if (_awayMission->veng.counterUntilElasiDestroyShip == 0 && !_awayMission->veng.firedTorpedo) {
+			// Elasi fire torpedoes at you since you wouldn't lower your shields.
+			showText(TX_VENA_F40);
+			showGameOverMenu();
+			return;
+		}
+	}
+
+	if (_awayMission->veng.counterUntilElasiBoardWithInvitation != 0) {
+		_awayMission->veng.counterUntilElasiBoardWithInvitation--;
+		if (_awayMission->veng.counterUntilElasiBoardWithInvitation == 0 && !_awayMission->veng.firedTorpedo) {
+			vengaElasiBeamOver();
+			return;
+		}
+	}
+}
+
+void Room::vengaElasiBeamOver() {
+	showText(TX_VENA_F32);
+	showGameOverMenu();
+}
+
+void Room::vengaUsePhaserAnywhere() {
+	showText(TX_SPEAKER_SPOCK, TX_VENA_F34);
+}
+
+void Room::vengaLookAtHypo() {
+	if (_awayMission->veng.oilInHypo)
+		showText(TX_VEN4N007);
+	else
+		showText(TX_VEN4N010);
+}
+
+void Room::vengaUseCommunicator() {
+	// Use communicator in any room except VENG2
+	if (!_awayMission->veng.enterpriseLeftForDistressCall) {
+		showText(TX_SPEAKER_KIRK,  TX_MUD4_018);
+		showText(TX_SPEAKER_UHURA, TX_BRIDU146);
+	} else if (!_awayMission->veng.elasiShipDecloaked) {
+		showText(TX_SPEAKER_KIRK,  TX_MUD4_018);
+		showText(TX_SPEAKER_UHURA, TX_VEN2U093);
+		showText(TX_SPEAKER_KIRK,  TX_VEN2_028);
+	} else
+		showText(TX_SPEAKER_SPOCK, TX_VEN2_066);
+}
+
 void Room::vengaUseMccoyOnDeadGuy() {
 	int val = getRandomWordInRange(0, 5);
 


Commit: b9ca6d2cb6a668c8ee54c9ea4632231efa66511b
    https://github.com/scummvm/scummvm/commit/b9ca6d2cb6a668c8ee54c9ea4632231efa66511b
Author: Matthew Stewart (stewartmatthew6 at gmail.com)
Date: 2019-02-02T12:17:14-05:00

Commit Message:
STARTREK: Saving for VENG mission

Changed paths:
    engines/startrek/awaymission.h
    engines/startrek/room.h
    engines/startrek/rooms/venga.cpp
    engines/startrek/saveload.cpp


diff --git a/engines/startrek/awaymission.h b/engines/startrek/awaymission.h
index 0375827..7db9ef8 100644
--- a/engines/startrek/awaymission.h
+++ b/engines/startrek/awaymission.h
@@ -712,6 +712,67 @@ struct AwayMission {
 			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;
 	};
 };
diff --git a/engines/startrek/room.h b/engines/startrek/room.h
index 6f84fab..a6b6c3e 100644
--- a/engines/startrek/room.h
+++ b/engines/startrek/room.h
@@ -3169,6 +3169,25 @@ public:
 
 			// venga (common)
 			bool walkingToDoor; // 0xcb (veng1), 0xca (veng4)
+
+			void saveLoadWithSerializer(Common::Serializer &ser) {
+				// veng1
+				ser.syncAsByte(doorOpenCounter);
+
+				// veng2
+				ser.syncAsByte(numCrewmenReadyToBeamOut);
+
+				// veng4
+				ser.syncAsByte(usingMedkitOnBrittany);
+
+				// veng6
+				ser.syncAsByte(kirkAndSpockReadyToAttachLeftCable);
+				ser.syncAsByte(kirkAndSpockReadyToAttachRightCable);
+				ser.syncAsByte(cableInUse);
+
+				// venga (common)
+				ser.syncAsByte(walkingToDoor);
+			}
 		} veng;
 
 	} _roomVar;
diff --git a/engines/startrek/rooms/venga.cpp b/engines/startrek/rooms/venga.cpp
index 5922d52..99be145 100644
--- a/engines/startrek/rooms/venga.cpp
+++ b/engines/startrek/rooms/venga.cpp
@@ -28,6 +28,8 @@ void Room::vengaTick() {
 	if (_awayMission->veng.counterUntilElasiBoardWithShieldsDown != 0) {
 		_awayMission->veng.counterUntilElasiBoardWithShieldsDown--;
 		if (_awayMission->veng.counterUntilElasiBoardWithShieldsDown == 0 && _awayMission->veng.poweredSystem != 2) {
+			// BUG: Should check you're now lowering the shields in the next phase (this
+			// is only meant for when they initially appear with your shields down)
 			vengaElasiBeamOver();
 			return;
 		}
diff --git a/engines/startrek/saveload.cpp b/engines/startrek/saveload.cpp
index 52bb7cb..f17d2f2 100644
--- a/engines/startrek/saveload.cpp
+++ b/engines/startrek/saveload.cpp
@@ -323,6 +323,9 @@ bool StarTrekEngine::saveOrLoadGameData(Common::SeekableReadStream *in, Common::
 		} else if (_missionName == "SINS") {
 			_awayMission.sins.saveLoadWithSerializer(ser);
 			_room->_roomVar.sins.saveLoadWithSerializer(ser);
+		} else if (_missionName == "VENG") {
+			_awayMission.veng.saveLoadWithSerializer(ser);
+			_room->_roomVar.veng.saveLoadWithSerializer(ser);
 		}
 
 		// The action queue


Commit: 2a6ee10182c6ff458ed56b7d01406f244c5b588a
    https://github.com/scummvm/scummvm/commit/2a6ee10182c6ff458ed56b7d01406f244c5b588a
Author: Matthew Stewart (stewartmatthew6 at gmail.com)
Date: 2019-02-02T12:17:14-05:00

Commit Message:
STARTREK: Bugfix to map preview of republic

Changed paths:
    engines/startrek/awaymission.h
    engines/startrek/menu.cpp


diff --git a/engines/startrek/awaymission.h b/engines/startrek/awaymission.h
index 7db9ef8..9c4d591 100644
--- a/engines/startrek/awaymission.h
+++ b/engines/startrek/awaymission.h
@@ -629,6 +629,7 @@ struct AwayMission {
 			bool bridgeCrewmanDead; // 0x30
 			bool scannedCaptainsChair; // 0x31
 			bool scannedComputerBank; // 0x32
+			bool showedRepublicMapFirstTime; // 0x33
 			bool impulseEnginesOn; // 0x34
 
 			// 0: beam still in place
diff --git a/engines/startrek/menu.cpp b/engines/startrek/menu.cpp
index 0ef1659..7142ebe 100644
--- a/engines/startrek/menu.cpp
+++ b/engines/startrek/menu.cpp
@@ -1020,7 +1020,7 @@ void StarTrekEngine::showRepublicMap(int16 arg0, int16 turbolift) {
 	actorFunc1();
 	_gfx->pushSprites();
 
-	if (!_awayMission.veng.scannedComputerBank) {
+	if (!_awayMission.veng.showedRepublicMapFirstTime) {
 		_gfx->setBackgroundImage(_gfx->loadBitmap("veng9b"));
 		_gfx->copyBackgroundScreen();
 		_system->updateScreen();
@@ -1067,7 +1067,13 @@ void StarTrekEngine::showRepublicMap(int16 arg0, int16 turbolift) {
 			}
 		}
 
-		_awayMission.veng.scannedComputerBank = true; // FIXME?
+		// BUGFIX: Original game used variable "scannedComputerBank" (0x32) instead of
+		// "showedRepublicMapFirstTime" (0x33), which is used elsewhere. Byte 0x33 is
+		// otherwise unused, so maybe this is a weird off-by-1 error.
+		// The effective result is that scanning the computer bank would cause the preview
+		// of the map screen to not appear.
+		_awayMission.veng.showedRepublicMapFirstTime = true;
+
 		_gfx->fadeoutScreen();
 	}
 


Commit: 2c2a8391ee46afe4d1a4f1be13d7a6988d3945d9
    https://github.com/scummvm/scummvm/commit/2c2a8391ee46afe4d1a4f1be13d7a6988d3945d9
Author: Matthew Stewart (stewartmatthew6 at gmail.com)
Date: 2019-02-23T20:41:14-05:00

Commit Message:
STARTREK: Fixes to drawR3Shape; red planet renders

Changed paths:
    engines/startrek/space.cpp
    engines/startrek/space.h
    engines/startrek/startrek.cpp


diff --git a/engines/startrek/space.cpp b/engines/startrek/space.cpp
index ec1c89d..781993f 100644
--- a/engines/startrek/space.cpp
+++ b/engines/startrek/space.cpp
@@ -325,13 +325,13 @@ void StarTrekEngine::drawR3Shape(R3 *r3) {
 			int16 index1 = i;
 			int16 index2 = (i + 1) & 3;
 
-			if (thing[index1 + 1] > thing[index2 + 1]) {
+			if (thing[index1 * 2 + 1] > thing[index2 * 2 + 1]) {
 				index1 = index2;
 				index2 = i;
 			}
 
-			int16 top = ceil(thing[index1 + 1]);
-			int16 bottom = floor(thing[index2 + 1]);
+			int16 top = ceil(thing[index1 * 2 + 1]);
+			int16 bottom = floor(thing[index2 * 2 + 1]);
 
 			if (top > bottom)
 				continue;
@@ -350,29 +350,29 @@ void StarTrekEngine::drawR3Shape(R3 *r3) {
 				shpImageBottom = bottom;
 
 			double dbl3f4;
-			if (thing[index2 + 1] == thing[index1 + 1])
+			if (thing[index2 * 2 + 1] == thing[index1 * 2 + 1])
 				dbl3f4 = 0.0;
 			else
-				dbl3f4 = (thing[index2] - thing[index1]) / (thing[index2 + 1] - thing[index1 + 1]);
+				dbl3f4 = (thing[index2 * 2] - thing[index1 * 2]) / (thing[index2 * 2 + 1] - thing[index1 * 2 + 1]);
 
-			int32 var3ec = (int32)(0x10000 * dbl3f4);
-			int32 var3e8 = (int32)(((top - thing[index1 + 1]) * dbl3f4 + thing[index1]) * 0x10000);
+			int32 boundDiff = (int32)(0x10000 * dbl3f4); // var3ec
+			int32 boundBase = (int32)(((top - thing[index1 * 2 + 1]) * dbl3f4 + thing[index1 * 2]) * 0x10000); // var3e8
 
 			for (int y = top; y <= bottom; y++) {
-				int16 var3f6 = var3e8 >> 16;
-				int16 var3f8 = (var3e8 + 0xffff) >> 16;
+				int16 rightBound = boundBase >> 16; // var3f6
+				int16 leftBound = (boundBase + 0xffff) >> 16; // var3f8
 
-				if (var3f8 < _starfieldRect.left)
-					var3f8 = _starfieldRect.left;
-				if (var3f8 < leftBounds[y])
-					leftBounds[y] = var3f8;
+				if (leftBound < _starfieldRect.left)
+					leftBound = _starfieldRect.left;
+				if (leftBound < leftBounds[y])
+					leftBounds[y] = leftBound;
 
-				if (var3f6 > _starfieldRect.right - 1)
-					var3f6 = _starfieldRect.right - 1;
-				if (var3f6 > rightBounds[y])
-					rightBounds[y] = var3f6;
+				if (rightBound > _starfieldRect.right - 1)
+					rightBound = _starfieldRect.right - 1;
+				if (rightBound > rightBounds[y])
+					rightBounds[y] = rightBound;
 
-				var3e8 += var3ec;
+				boundBase += boundDiff;
 			}
 		}
 
@@ -389,7 +389,6 @@ void StarTrekEngine::drawR3Shape(R3 *r3) {
 				break;
 		}
 
-		debug("Top: %d, Bot: %d", shpImageTop, shpImageBottom);
 		if (shpImageTop <= shpImageBottom) {
 			bool var3fa = false;
 			if (r3->field1e == 2) {
@@ -406,8 +405,10 @@ void StarTrekEngine::drawR3Shape(R3 *r3) {
 				}
 			}
 
+			// Amount added to X/Y positions after each pixel is drawn
 			int16 xDiff = (int16)(dbl60 * 256);
 			int16 yDiff = (int16)(dbl58 * 256);
+
 			int16 var3f2 = (int16)(dbl50 * 256);
 			int16 var3f4 = (int16)(dbl48 * 256);
 
@@ -447,6 +448,7 @@ void StarTrekEngine::drawR3Shape(R3 *r3) {
 			for (int y = shpImageTop; y <= shpImageBottom; y++) {
 				int16 leftBound = leftBounds[y];
 				int16 rowWidth = rightBounds[y] - leftBound;
+
 				int16 srcX = leftBound * xDiff + var3f6;
 				int16 srcY = leftBound * yDiff + var3f8;
 				var3f6 += var3f2;
@@ -458,8 +460,6 @@ void StarTrekEngine::drawR3Shape(R3 *r3) {
 				if (rowWidth == 0)
 					continue;
 
-				debug("Width: %d", rowWidth);
-
 				if (var3fa) {
 					srcX += 0x80;
 					srcY += 0x80;
@@ -473,7 +473,7 @@ void StarTrekEngine::drawR3Shape(R3 *r3) {
 						cx += xDiff;
 						bx += yDiff;
 						if (b == 0)
-							*(di++) = 8; // FIXME: shouldn't assign anything, fix after done testing
+							di++;
 						else
 							*(di++) = b;
 					}
diff --git a/engines/startrek/space.h b/engines/startrek/space.h
index d5a05d4..075ea09 100644
--- a/engines/startrek/space.h
+++ b/engines/startrek/space.h
@@ -136,7 +136,7 @@ public:
 		*this = *this * m2;
 	}
 
-	TMatrix<T> invert() {
+	TMatrix<T> invert() const {
 		TMatrix<T> ret;
 		for (int i = 0; i < 3; i++) {
 			for (int j = 0; j < 3; j++) {
diff --git a/engines/startrek/startrek.cpp b/engines/startrek/startrek.cpp
index 0a3a89a..5d46dd9 100644
--- a/engines/startrek/startrek.cpp
+++ b/engines/startrek/startrek.cpp
@@ -124,7 +124,7 @@ Common::Error StarTrekEngine::run() {
 	initGraphics(SCREEN_WIDTH, SCREEN_HEIGHT, &format);
 	initializeEventsAndMouse();
 
-	bool shouldPlayIntro = false;
+	bool shouldPlayIntro = true;
 	bool loadedSave = false;
 
 	if (ConfMan.hasKey("save_slot")) {





More information about the Scummvm-git-logs mailing list