void CRoomFlags::setRandomLocation(int classNum, bool flag) { uint minRoom, elevNum, maxRoom, maxFloor, minFloor; do { switch (classNum) { case 1: minFloor = 2; maxFloor = 19; minRoom = 1; maxRoom = 3; elevNum = g_vm->getRandomNumber(flag ? 2 : 3); break; case 2: minFloor = 20; maxFloor = 27; elevNum = g_vm->getRandomNumber(flag ? 2 : 3); minRoom = 1; maxRoom = ((elevNum - 1) & 1) ? 3 : 4; break; case 3: minRoom = 1; minFloor = 28; maxFloor = 38; maxRoom = 18; elevNum = g_vm->getRandomNumber(1); if (elevNum == 1) elevNum = 2; break; default: return; } uint floorNum = minFloor + g_vm->getRandomNumber(maxFloor - minFloor); uint roomNum = minRoom + g_vm->getRandomNumber(maxRoom - minRoom); setElevatorBits(elevNum); setRoomBits(roomNum); setFloorNum(floorNum); } while (_data == 0x59706); }
void CRoomFlags::setRandomLocation(PassengerClass classNum, bool flag) { uint minRoom, elevNum, maxRoom, maxFloor, minFloor; do { switch (classNum) { case FIRST_CLASS: minFloor = 2; maxFloor = 19; minRoom = 1; maxRoom = 3; elevNum = g_vm->getRandomNumber(flag ? 2 : 3); break; case SECOND_CLASS: minFloor = 20; maxFloor = 27; elevNum = g_vm->getRandomNumber(flag ? 2 : 3); minRoom = 1; maxRoom = ((elevNum - 1) & 1) ? 3 : 4; break; case THIRD_CLASS: minRoom = 1; minFloor = 28; maxFloor = 38; maxRoom = 18; elevNum = g_vm->getRandomNumber(1) ? 2 : 0; break; default: return; } uint floorNum = minFloor + g_vm->getRandomNumber(maxFloor - minFloor); uint roomNum = minRoom + g_vm->getRandomNumber(maxRoom - minRoom); setElevatorBits(elevNum); setRoomBits(roomNum); setFloorNum(floorNum); setPassengerClassBits(classNum); } while (_data == 0x59706); }