aboutsummaryrefslogtreecommitdiff
path: root/engines/titanic/room_flags.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/titanic/room_flags.cpp')
-rw-r--r--engines/titanic/room_flags.cpp135
1 files changed, 68 insertions, 67 deletions
diff --git a/engines/titanic/room_flags.cpp b/engines/titanic/room_flags.cpp
index 9be8ea3d33..66519aa091 100644
--- a/engines/titanic/room_flags.cpp
+++ b/engines/titanic/room_flags.cpp
@@ -112,7 +112,7 @@ int CRoomFlags::getRoomArea() const {
uint v6 = getElevatorNum();
if (v6 >= 1 && v6 <= 4) {
- uint v7 = getPassengerClassNum() - 1;
+ uint v7 = (int)getPassengerClassNum() - 1;
if (v7) {
uint v8 = v7 - 1;
if (v8) {
@@ -148,41 +148,11 @@ CString CRoomFlags::getRoomDesc() const {
result += ", ";
result += getElevatorDesc();
result += ", ";
- result += getRoomDesc();
+ result += getRoomNumDesc();
return result;
}
case 4:
- if (isTransportRoom()) {
- switch (_data) {
- case 0x68797:
- return "The Service Elevator";
- case 0x5D3AD:
- return "The Super Galactic Leisure Lounge";
- case 0x96E45:
- return "The Elevator";
- case 0xAD171:
- return "The Dome";
- case 0xC95E9:
- return "The Pellerator";
- case 0xDF4D1:
- return "The Top of the Well";
- default:
- break;
- }
- }
-
- if (getRoomCategory() == 0) {
- return "Nowhere you're likely to want to go.";
- } else {
- CString result = getPassengerClassDesc();
- result += ", ";
- result += getFloorDesc();
- return result;
- }
- break;
-
- case 5:
switch (_data) {
case 0x1D0D9:
return "The Parrot Lobby";
@@ -215,6 +185,36 @@ CString CRoomFlags::getRoomDesc() const {
}
return "Unknown Room";
+ case 5:
+ if (isTransportRoom()) {
+ switch (_data) {
+ case 0x68797:
+ return "The Service Elevator";
+ case 0x5D3AD:
+ return "The Super Galactic Leisure Lounge";
+ case 0x96E45:
+ return "The Elevator";
+ case 0xAD171:
+ return "The Dome";
+ case 0xC95E9:
+ return "The Pellerator";
+ case 0xDF4D1:
+ return "The Top of the Well";
+ default:
+ break;
+ }
+ }
+
+ if (getRoomCategory() == 0) {
+ return "Nowhere you're likely to want to go.";
+ } else {
+ CString result = getPassengerClassDesc();
+ result += ", ";
+ result += getFloorDesc();
+ return result;
+ }
+ break;
+
default:
break;
}
@@ -241,14 +241,14 @@ uint CRoomFlags::getPassengerClassBits() const {
}
CString CRoomFlags::getPassengerClassDesc() const {
- int classNum = getPassengerClassNum();
+ PassengerClass classNum = getPassengerClassNum();
switch (classNum) {
- case 1:
+ case FIRST_CLASS:
return "1st class";
- case 2:
+ case SECOND_CLASS:
return "2nd class";
- case 3:
+ case THIRD_CLASS:
return "SGT class";
default:
return "no class";
@@ -269,21 +269,20 @@ uint CRoomFlags::decodeFloorBits(uint bits) const {
int offset = bits & 0xF;
switch ((bits >> 4) & 0xF) {
- case 1:
- case 2:
- case 3:
- base = 40;
+ case 9:
+ base = 0;
break;
- case 4:
+ case 0xD:
base = 10;
break;
- case 5:
+ case 0xE:
base = 20;
break;
- case 6:
+ case 0xF:
base = 30;
break;
default:
+ base = 40;
break;
}
@@ -369,29 +368,29 @@ CString CRoomFlags::getSuccUBusRoomName() const {
return CString();
}
-void CRoomFlags::changeLocation(int action) {
+void CRoomFlags::changeClass(PassengerClass newClassNum) {
uint floorNum = getFloorNum();
uint roomNum = getRoomNum();
uint elevatorNum = getElevatorNum();
- uint classNum = getPassengerClassNum();
+ PassengerClass classNum = getPassengerClassNum();
uint v10, v11, v12, v13;
switch (classNum) {
- case 1:
+ case FIRST_CLASS:
v10 = 2;
v11 = 19;
v12 = 1;
v13 = 3;
break;
- case 2:
+ case SECOND_CLASS:
v10 = 20;
v11 = 27;
v12 = 1;
v13 = (elevatorNum & 1) ? 3 : 4;
break;
- case 3:
+ case THIRD_CLASS:
v10 = 28;
v11 = 38;
v12 = 1;
@@ -407,25 +406,28 @@ void CRoomFlags::changeLocation(int action) {
}
// Perform action to change room or floor
- switch (action) {
- case 1:
+ switch (newClassNum) {
+ case FIRST_CLASS:
if (--roomNum < v12)
roomNum = v12;
break;
- case 2:
+ case SECOND_CLASS:
if (++roomNum > v13)
roomNum = v13;
break;
- case 3:
+ case THIRD_CLASS:
if (--floorNum < v10)
floorNum = v10;
break;
- case 4:
+ case UNCHECKED:
if (++floorNum > v11)
floorNum = v11;
+
+ default:
+ break;
}
// Set new floor and room
@@ -442,16 +444,16 @@ bool CRoomFlags::compareClassElevator(uint flags1, uint flags2) {
uint elev1 = f1.getElevatorNum();
uint elev2 = f2.getElevatorNum();
- uint class1 = f1.getPassengerClassNum();
- uint class2 = f2.getPassengerClassNum();
+ PassengerClass class1 = f1.getPassengerClassNum();
+ PassengerClass class2 = f2.getPassengerClassNum();
- if (class1 > 0 && class1 < 3) {
+ if (class1 == FIRST_CLASS || class1 == SECOND_CLASS) {
if (elev1 == 2)
elev1 = 1;
else if (elev1 == 4)
elev1 = 3;
}
- if (class2 > 0 && class2 < 3) {
+ if (class2 == FIRST_CLASS || class2 == SECOND_CLASS) {
if (elev2 == 2)
elev2 = 1;
else if (elev2 == 4)
@@ -474,12 +476,12 @@ bool CRoomFlags::isTitania(uint flags1, uint flags2) {
return flags2 == 0x8A397;
}
-void CRoomFlags::setRandomLocation(int classNum, bool flag) {
+void CRoomFlags::setRandomLocation(PassengerClass classNum, bool flag) {
uint minRoom, elevNum, maxRoom, maxFloor, minFloor;
do {
switch (classNum) {
- case 1:
+ case FIRST_CLASS:
minFloor = 2;
maxFloor = 19;
minRoom = 1;
@@ -487,7 +489,7 @@ void CRoomFlags::setRandomLocation(int classNum, bool flag) {
elevNum = g_vm->getRandomNumber(flag ? 2 : 3);
break;
- case 2:
+ case SECOND_CLASS:
minFloor = 20;
maxFloor = 27;
elevNum = g_vm->getRandomNumber(flag ? 2 : 3);
@@ -495,14 +497,12 @@ void CRoomFlags::setRandomLocation(int classNum, bool flag) {
maxRoom = ((elevNum - 1) & 1) ? 3 : 4;
break;
- case 3:
+ case THIRD_CLASS:
minRoom = 1;
minFloor = 28;
maxFloor = 38;
maxRoom = 18;
- elevNum = g_vm->getRandomNumber(1);
- if (elevNum == 1)
- elevNum = 2;
+ elevNum = g_vm->getRandomNumber(1) ? 2 : 0;
break;
default:
@@ -514,14 +514,15 @@ void CRoomFlags::setRandomLocation(int classNum, bool flag) {
setElevatorBits(elevNum);
setRoomBits(roomNum);
setFloorNum(floorNum);
+ setPassengerClassBits(classNum);
} while (_data == 0x59706);
}
-int CRoomFlags::whatPassengerClass(int floorNum) {
+PassengerClass CRoomFlags::whatPassengerClass(int floorNum) {
if (is2To19(floorNum))
- return 1;
+ return FIRST_CLASS;
- return is20To27(floorNum) ? 2 : 3;
+ return is20To27(floorNum) ? SECOND_CLASS : THIRD_CLASS;
}
} // End of namespace Titanic