diff options
Diffstat (limited to 'engines/titanic/room_flags.cpp')
-rw-r--r-- | engines/titanic/room_flags.cpp | 135 |
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 |