[Scummvm-git-logs] scummvm master -> 8eaf094bf59a30255f6e981bd9e1c593fc17b2fb

dreammaster dreammaster at scummvm.org
Sun Sep 11 05:16:24 CEST 2016


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

Summary:
cb33eca327 DEVTOOLS: Moved Titanic messages to create_titanic
8eaf094bf5 TITANIC: Move text messages to DAT file


Commit: cb33eca327414837d9095b7797a1996705fd768f
    https://github.com/scummvm/scummvm/commit/cb33eca327414837d9095b7797a1996705fd768f
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2016-09-10T23:15:30-04:00

Commit Message:
DEVTOOLS: Moved Titanic messages to create_titanic

Changed paths:
    devtools/create_titanic/create_titanic_dat.cpp



diff --git a/devtools/create_titanic/create_titanic_dat.cpp b/devtools/create_titanic/create_titanic_dat.cpp
index 82285dc..6bbf8b1 100644
--- a/devtools/create_titanic/create_titanic_dat.cpp
+++ b/devtools/create_titanic/create_titanic_dat.cpp
@@ -55,7 +55,7 @@
  */
 
 #define VERSION_NUMBER 1
-#define HEADER_SIZE 0xD00
+#define HEADER_SIZE 0xD40
 
 Common::File inputFile, outputFile;
 Common::PEResources res;
@@ -414,6 +414,70 @@ static const BedheadEntry OFF_RESTING_D_WRONG[1] = {
 	{ "Any", "Any", "Any", "ClosedWrong", 59, 70 }
 };
 
+static const char *const STRINGS_EN[] = {
+	"",
+	"You are standing outside the Pellerator.",
+	"I'm sorry, you cannot enter this pellerator at present as a bot is in the way.",
+	"The Succ-U-Bus is in Standby, or \"Off\" mode at present.",
+	"There is currently nothing to deliver.",
+	"There is currently nothing in the tray to send.",
+	"The Succ-U-Bus is a Single Entity Delivery Device.",
+	"Chickens are allocated on a one-per-customer basis.",
+	"Only one piece of chicken per passenger. Thank you.",
+	"You have been upgraded to 1st Class status. Enjoy hugely.",
+	"You have been upgraded to 2nd Class status. Enjoy.",
+	"This room is reserved for the exclusive use of first class passengers."
+	" That does not currently include you",
+	"No losers.",
+	"Passengers of your class are not permitted to enter this area.",
+	"Please exit from the other side.",
+	"For mysterious and unknowable reasons, this transport is temporarily out of order.",
+	"Unfortunately this fan controller has blown a fuse.",
+	"In case of emergency hammer requirement, poke with long stick.",
+	"This stick is too short to reach the branches.",
+	"You are standing outside Elevator %d",
+	"I'm sorry, you cannot enter this elevator at present as a bot is in the way.",
+	"This elevator is currently in an advanced state of non-functionality.",
+	"That light appears to be loose.",
+	"Lumi-Glow(tm) Lights.  They glow in the dark!",
+	"You already have one.",
+	"'This glass is totally and utterly unbreakable.",
+	"For emergency long stick, smash glass.",
+	"This dispenser has suddenly been fitted with unbreakable glass "
+	"to prevent unseemly hoarding of sticks.",
+	"The Chicken is already quite clean enough, thank you.",
+	"Now would be an excellent opportunity to adjust your viewing apparatus.",
+	"You cannot take this because the cage is locked shut.",
+	"You are already at your chosen destination.",
+	"Passengers of your class are not permitted to enter this area.",
+	"Sorry, you must be at least 3rd class before you can summon for help.",
+	"You have not assigned a room to go to.",
+	"Sorry, this elevator does not go below floor 27.",
+	"You must select a game to load first.",
+	"You must select a game to save first.",
+	"Please supply Galactic reference material.",
+	"This is the restaurant music system.  It appears to be locked.",
+	"You can't pick this up on account of it being stuck to the branch.",
+	"You cannot get this, it is frozen to the branch.",
+	"Please check in at the reception desk.",
+	"This foodstuff is already sufficiently garnished.",
+	"Sadly, this dispenser is currently empty.",
+	"Please place food source beneath dispenser for sauce delivery.",
+	"The Seasonal Adjustment switch is not operational at the present time.",
+	"This is your stateroom. It is for sleeping. If you desire "
+	"entertainment or relaxation, please visit your local leisure lounge.",
+	"The bed will not currently support your weight."
+	" We are working on this problem but are unlikely to be able to fix it.",
+	"This is not your assigned room. Please do not enjoy.",
+	"Sadly, this is out of your reach.",
+	"The Succ-U-Bus is a Single Entity Delivery Device.",
+	"Sadly, the Grand Canal transport system is closed for the winter.",
+	"This area is off limits to passengers.",
+	"Go where?",
+	"It would be nice if you could take that but you can't.",
+	"A bowl of pistachio nuts.",
+	"Not a bowl of pistachio nuts."
+};
 
 void NORETURN_PRE error(const char *s, ...) {
 	printf("%s\n", s);
@@ -869,7 +933,7 @@ void writeData() {
 	writeStringArray("TEXT/ITEM_NAMES", ITEM_NAMES, 46);
 	writeStringArray("TEXT/ITEM_IDS", ITEM_IDS, 40);
 	writeStringArray("TEXT/ROOM_NAMES", ROOM_NAMES, 34);
-
+	writeStringArray("TEXT/STRINGS", STRINGS_EN, 58);
 	const int TEXT_PHRASES[3] = { 0x61D3C8, 0x618340, 0x61B1E0 };
 	const int TEXT_REPLACEMENTS1[3] = { 0x61D9B0, 0x61C788, 0x61B7C8 };
 	const int TEXT_REPLACEMENTS2[3] = { 0x61DD20, 0x61CAF8, 0x61BB38 };


Commit: 8eaf094bf59a30255f6e981bd9e1c593fc17b2fb
    https://github.com/scummvm/scummvm/commit/8eaf094bf59a30255f6e981bd9e1c593fc17b2fb
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2016-09-10T23:16:15-04:00

Commit Message:
TITANIC: Move text messages to DAT file

Changed paths:
  A engines/titanic/support/strings.cpp
  A engines/titanic/support/strings.h
    engines/titanic/carry/long_stick.cpp
    engines/titanic/carry/napkin.cpp
    engines/titanic/carry/vision_centre.cpp
    engines/titanic/core/game_object.cpp
    engines/titanic/core/game_object.h
    engines/titanic/game/chicken_dispensor.cpp
    engines/titanic/game/fan_control.cpp
    engines/titanic/game/hammer_dispensor_button.cpp
    engines/titanic/game/lemon_dispensor.cpp
    engines/titanic/game/light.cpp
    engines/titanic/game/long_stick_dispenser.cpp
    engines/titanic/game/nav_helmet.cpp
    engines/titanic/game/parrot/parrot_perch_holder.cpp
    engines/titanic/game/pet/pet_lift.cpp
    engines/titanic/game/phonograph_lid.cpp
    engines/titanic/game/pickup/pick_up_speech_centre.cpp
    engines/titanic/game/sauce_dispensor.cpp
    engines/titanic/game/seasonal_adjustment.cpp
    engines/titanic/game/sgt/sgt_nav.cpp
    engines/titanic/game/sgt/sgt_state_room.cpp
    engines/titanic/game/speech_dispensor.cpp
    engines/titanic/game/sweet_bowl.cpp
    engines/titanic/game/third_class_canal.cpp
    engines/titanic/game/transport/lift_indicator.cpp
    engines/titanic/game/transport/pellerator.cpp
    engines/titanic/game/wheel_hotspot.cpp
    engines/titanic/module.mk
    engines/titanic/moves/call_pellerator.cpp
    engines/titanic/moves/enter_exit_first_class_state.cpp
    engines/titanic/moves/enter_sec_class_state.cpp
    engines/titanic/moves/exit_pellerator.cpp
    engines/titanic/moves/exit_tiania.cpp
    engines/titanic/moves/restricted_move.cpp
    engines/titanic/moves/trip_down_canal.cpp
    engines/titanic/npcs/bilge_succubus.cpp
    engines/titanic/npcs/deskbot.cpp
    engines/titanic/npcs/succubus.cpp
    engines/titanic/pet_control/pet_control.cpp
    engines/titanic/pet_control/pet_control.h
    engines/titanic/pet_control/pet_conversations.cpp
    engines/titanic/pet_control/pet_load.cpp
    engines/titanic/pet_control/pet_save.cpp
    engines/titanic/pet_control/pet_starfield.cpp



diff --git a/engines/titanic/carry/long_stick.cpp b/engines/titanic/carry/long_stick.cpp
index 557b75a..16cd69e 100644
--- a/engines/titanic/carry/long_stick.cpp
+++ b/engines/titanic/carry/long_stick.cpp
@@ -48,7 +48,7 @@ bool CLongStick::UseWithOtherMsg(CUseWithOtherMsg *msg) {
 		CPuzzleSolvedMsg puzzleMsg;
 		puzzleMsg.execute(msg->_other);
 	} else if (msg->_other->isEquals("LongStickDispensor")) {
-		petDisplayMessage(1, "You already have one.");
+		petDisplayMessage(1, ALREADY_HAVE_STICK);
 	} else if (msg->_other->isEquals("Bomb")) {
 		CActMsg actMsg("Hit");
 		actMsg.execute("Bomb");
diff --git a/engines/titanic/carry/napkin.cpp b/engines/titanic/carry/napkin.cpp
index d0ee9ac..3996ca7 100644
--- a/engines/titanic/carry/napkin.cpp
+++ b/engines/titanic/carry/napkin.cpp
@@ -49,7 +49,7 @@ bool CNapkin::UseWithOtherMsg(CUseWithOtherMsg *msg) {
 			CActMsg actMsg("Clean");
 			actMsg.execute("Chicken");
 		} else {
-			petDisplayMessage("The Chicken is already quite clean enough, thank you.");
+			petDisplayMessage(CHICKEN_IS_CLEAN);
 		}
 	}
 
diff --git a/engines/titanic/carry/vision_centre.cpp b/engines/titanic/carry/vision_centre.cpp
index fd30089..f81e35f 100644
--- a/engines/titanic/carry/vision_centre.cpp
+++ b/engines/titanic/carry/vision_centre.cpp
@@ -49,7 +49,7 @@ bool CVisionCentre::MouseButtonDownMsg(CMouseButtonDownMsg *msg) {
 	if (_fieldE0) {
 		return CBrain::MouseButtonDownMsg(msg);
 	} else {
-		petDisplayMessage(1, "It would be nice if you could take that but you can't.");
+		petDisplayMessage(1, NICE_IF_TAKE_BUT_CANT);
 		return true;
 	}
 }
@@ -58,7 +58,7 @@ bool CVisionCentre::MouseDragStartMsg(CMouseDragStartMsg *msg) {
 	if (_fieldE0) {
 		return CBrain::MouseDragStartMsg(msg);
 	} else {
-		petDisplayMessage(1, "It would be nice if you could take that but you can't.");
+		petDisplayMessage(1, NICE_IF_TAKE_BUT_CANT);
 		return true;
 	}
 }
diff --git a/engines/titanic/core/game_object.cpp b/engines/titanic/core/game_object.cpp
index 59ae961..a1427b1 100644
--- a/engines/titanic/core/game_object.cpp
+++ b/engines/titanic/core/game_object.cpp
@@ -1536,14 +1536,24 @@ bool CGameObject::petDoorOrBellbotPresent() const {
 	return pet ? pet->isDoorOrBellbotPresent() : false;
 }
 
+void CGameObject::petDisplayMessage(int unused, StringId stringId) {
+	petDisplayMessage(stringId);
+}
+
+void CGameObject::petDisplayMessage(StringId stringId, int param) {
+	CPetControl *pet = getPetControl();
+	if (pet)
+		pet->displayMessage(stringId, param);
+}
+
 void CGameObject::petDisplayMessage(int unused, const CString &msg) {
 	petDisplayMessage(msg);
 }
 
-void CGameObject::petDisplayMessage(const CString &msg) {
+void CGameObject::petDisplayMessage(const CString &msg, int param) {
 	CPetControl *pet = getPetControl();
 	if (pet)
-		pet->displayMessage(msg);
+		pet->displayMessage(msg, param);
 }
 
 void CGameObject::petInvChange() {
diff --git a/engines/titanic/core/game_object.h b/engines/titanic/core/game_object.h
index 0da3fad..b9a55ac 100644
--- a/engines/titanic/core/game_object.h
+++ b/engines/titanic/core/game_object.h
@@ -25,13 +25,14 @@
 
 #include "audio/mixer.h"
 #include "common/stream.h"
+#include "titanic/core/named_item.h"
+#include "titanic/sound/proximity.h"
 #include "titanic/support/mouse_cursor.h"
 #include "titanic/support/credit_text.h"
 #include "titanic/support/movie_range_info.h"
-#include "titanic/sound/proximity.h"
 #include "titanic/support/rect.h"
+#include "titanic/support/strings.h"
 #include "titanic/support/movie_clip.h"
-#include "titanic/core/named_item.h"
 #include "titanic/pet_control/pet_section.h"
 #include "titanic/pet_control/pet_text.h"
 #include "titanic/game_state.h"
@@ -826,12 +827,22 @@ public:
 	/**
 	 * Display a message in the PET
 	 */
-	void petDisplayMessage(int unused, const CString &msg);
+	void petDisplayMessage(int unused, StringId stringId);
+
+	/**
+	 * Display a message in the PET
+	 */
+	void petDisplayMessage(int unused, const CString &str);
+
+	/**
+	 * Display a message in the PET
+	 */
+	void petDisplayMessage(StringId stringId, int param = 0);
 
 	/**
 	 * Display a message in the PET
 	 */
-	void petDisplayMessage(const CString &msg);
+	void petDisplayMessage(const CString &str, int param = 0);
 
 	/**
 	 * Gets the entry number used when last arriving at the well
diff --git a/engines/titanic/game/chicken_dispensor.cpp b/engines/titanic/game/chicken_dispensor.cpp
index 7fb8fef..17d1e6a 100644
--- a/engines/titanic/game/chicken_dispensor.cpp
+++ b/engines/titanic/game/chicken_dispensor.cpp
@@ -65,14 +65,14 @@ bool CChickenDispensor::StatusChangeMsg(CStatusChangeMsg *msg) {
 
 	for (obj = pet->getFirstObject(); obj; obj = pet->getNextObject(obj)) {
 		if (obj->isEquals("Chicken")) {
-			petDisplayMessage(1, "Chickens are allocated on a one-per-customer basis.");
+			petDisplayMessage(1, ONE_CHICKEN_PER_CUSTOMER);
 			return true;
 		}
 	}
 
 	for (obj = getMailManFirstObject(); obj; obj = getNextMail(obj)) {
 		if (obj->isEquals("Chicken")) {
-			petDisplayMessage(1, "Chickens are allocated on a one-per-customer basis.");
+			petDisplayMessage(1, ONE_ALLOCATED_CHICKEN_PER_CUSTOMER);
 			return true;
 		}
 	}
@@ -82,7 +82,7 @@ bool CChickenDispensor::StatusChangeMsg(CStatusChangeMsg *msg) {
 
 	switch (v1) {
 	case 0:
-		petDisplayMessage(1, "Only one piece of chicken per passenger. Thank you.");
+		petDisplayMessage(1, ONE_CHICKEN_PER_CUSTOMER);
 		break;
 	case 1:
 		setVisible(true);
diff --git a/engines/titanic/game/fan_control.cpp b/engines/titanic/game/fan_control.cpp
index 56a1e49..ad3efc9 100644
--- a/engines/titanic/game/fan_control.cpp
+++ b/engines/titanic/game/fan_control.cpp
@@ -137,7 +137,7 @@ bool CFanControl::StatusChangeMsg(CStatusChangeMsg *msg) {
 			statusMsg._newStatus = _state;
 			statusMsg.execute("RightFan");
 		} else {
-			petDisplayMessage(1, "Unfortunately this fan controller has blown a fuse.");
+			petDisplayMessage(1, FAN_HAS_BLOWN_A_FUSE);
 		}
 	}
 
diff --git a/engines/titanic/game/hammer_dispensor_button.cpp b/engines/titanic/game/hammer_dispensor_button.cpp
index fbda501..89d37a0 100644
--- a/engines/titanic/game/hammer_dispensor_button.cpp
+++ b/engines/titanic/game/hammer_dispensor_button.cpp
@@ -69,7 +69,7 @@ bool CHammerDispensorButton::PuzzleSolvedMsg(CPuzzleSolvedMsg *msg) {
 
 bool CHammerDispensorButton::MouseButtonUpMsg(CMouseButtonUpMsg *msg) {
 	playSound("z#93.wav");
-	petDisplayMessage(1, "In case of emergency hammer requirement, poke with long stick.");
+	petDisplayMessage(1, POKE_WITH_LONG_STICK);
 	return true;
 }
 
diff --git a/engines/titanic/game/lemon_dispensor.cpp b/engines/titanic/game/lemon_dispensor.cpp
index 31a04cb..f84a494 100644
--- a/engines/titanic/game/lemon_dispensor.cpp
+++ b/engines/titanic/game/lemon_dispensor.cpp
@@ -80,7 +80,7 @@ bool CLemonDispensor::FrameMsg(CFrameMsg *msg) {
 		CGameObject *obj = getDraggingObject();
 		if (obj && getView() == findView()) {
 			if (obj->isEquals("Perch")) {
-				petDisplayMessage(1, "This stick is too short to reach the branches.");
+				petDisplayMessage(1, TOO_SHORT_TO_REACH_BRANCHES);
 				return true;
 			}
 
diff --git a/engines/titanic/game/light.cpp b/engines/titanic/game/light.cpp
index 65e3570..bc8782a 100644
--- a/engines/titanic/game/light.cpp
+++ b/engines/titanic/game/light.cpp
@@ -101,10 +101,10 @@ bool CLight::StatusChangeMsg(CStatusChangeMsg *msg) {
 	bool flag = pet ? pet->isRoom59706() : false;
 
 	if (_fieldFC == 1 && flag) {
-		petDisplayMessage(1, "That light appears to be loose.");
+		petDisplayMessage(1, LIGHT_IS_LOOSE);
 		playSound("z#144.wav", 70);
 	} else {
-		petDisplayMessage(1, "Lumi-Glow(tm) Lights.  They glow in the dark!");
+		petDisplayMessage(1, LUMI_GLOW_LIGHTS);
 		playSound("z#62.wav", 70);
 	}
 
@@ -116,10 +116,10 @@ bool CLight::MouseButtonDownMsg(CMouseButtonDownMsg *msg) {
 	bool flag = pet ? pet->isRoom59706() : false;
 
 	if (_fieldFC == 1 && flag) {
-		petDisplayMessage(1, "That light appears to be loose.");
+		petDisplayMessage(1, LIGHT_IS_LOOSE);
 		playSound("z#144.wav", 70);
 	} else {
-		petDisplayMessage(1, "Lumi-Glow(tm) Lights.  They glow in the dark!");
+		petDisplayMessage(1, LUMI_GLOW_LIGHTS);
 		playSound("z#62.wav", 70);
 	}
 
diff --git a/engines/titanic/game/long_stick_dispenser.cpp b/engines/titanic/game/long_stick_dispenser.cpp
index 08a29f2..04014e8 100644
--- a/engines/titanic/game/long_stick_dispenser.cpp
+++ b/engines/titanic/game/long_stick_dispenser.cpp
@@ -62,7 +62,7 @@ bool CLongStickDispenser::PuzzleSolvedMsg(CPuzzleSolvedMsg *msg) {
 		loadFrame(19);
 	} else if (_fieldC0) {
 		playSound("z#63.wav");
-		petDisplayMessage(1, "'This glass is totally and utterly unbreakable.");
+		petDisplayMessage(1, GLASS_IS_UNBREAKABLE);
 	}
 
 	return true;
@@ -92,11 +92,10 @@ bool CLongStickDispenser::MouseButtonDownMsg(CMouseButtonDownMsg *msg) {
 
 		switch (_fieldBC) {
 		case 0:
-			petDisplayMessage(1, "For emergency long stick, smash glass.");
+			petDisplayMessage(1, FOR_STICK_BREAK_GLASS);
 			break;
 		case 1:
-			petDisplayMessage(1, "This dispenser has suddenly been fitted with unbreakable glass "
-				"to prevent unseemly hoarding of sticks.");
+			petDisplayMessage(1, DISPENSOR_HAS_UNBREAKABLE_GLASS);
 			break;
 		default:
 			break;
diff --git a/engines/titanic/game/nav_helmet.cpp b/engines/titanic/game/nav_helmet.cpp
index 08ff073..96411ad 100644
--- a/engines/titanic/game/nav_helmet.cpp
+++ b/engines/titanic/game/nav_helmet.cpp
@@ -54,7 +54,7 @@ bool CNavHelmet::MovieEndMsg(CMovieEndMsg *msg) {
 		CPetControl *pet = getPetControl();
 		if (pet) {
 			pet->setArea(PET_STARFIELD);
-			petDisplayMessage(1, "Now would be an excellent opportunity to adjust your viewing apparatus.");
+			petDisplayMessage(1, ADJUST_VIEWING_APPARATUS);
 			pet->incAreaLocks();
 		}
 
diff --git a/engines/titanic/game/parrot/parrot_perch_holder.cpp b/engines/titanic/game/parrot/parrot_perch_holder.cpp
index d594446..b1a7dab 100644
--- a/engines/titanic/game/parrot/parrot_perch_holder.cpp
+++ b/engines/titanic/game/parrot/parrot_perch_holder.cpp
@@ -47,7 +47,7 @@ void CParrotPerchHolder::load(SimpleFile *file) {
 bool CParrotPerchHolder::MouseButtonDownMsg(CMouseButtonDownMsg *msg) {
 	if (CParrot::_v1) {
 		if (CCage::_open) {
-			petDisplayMessage("You cannot take this because the cage is locked shut.");
+			petDisplayMessage(CANNOT_TAKE_CAGE_LOCKED);
 		} else if (!CParrot::_v4) {
 			CTrueTalkTriggerActionMsg triggerMsg(280252, 0, 0);
 			triggerMsg.execute(getRoot(), CParrot::_type,
diff --git a/engines/titanic/game/pet/pet_lift.cpp b/engines/titanic/game/pet/pet_lift.cpp
index afa9dd0..a7b4885 100644
--- a/engines/titanic/game/pet/pet_lift.cpp
+++ b/engines/titanic/game/pet/pet_lift.cpp
@@ -52,7 +52,7 @@ bool CPETLift::TransportMsg(CTransportMsg *msg) {
 	} else if (msg->_roomName == "PlayersRoom" && pet) {
 		int assignedFloor = pet->getAssignedFloorNum();
 		if (assignedFloor < 1 || assignedFloor > 39) {
-			pet->petDisplayMessage("You have not assigned a room to go to.");
+			pet->petDisplayMessage(NO_ROOM_ASSIGNED);
 			floorNum = -1;
 		}
 	}
@@ -61,7 +61,7 @@ bool CPETLift::TransportMsg(CTransportMsg *msg) {
 		int elevatorNum = pet ? pet->getRoomsElevatorNum() : 0;
 
 		if ((elevatorNum == 2 || elevatorNum == 4) && floorNum > 27) {
-			petDisplayMessage("Sorry, this elevator does not go below floor 27.");
+			petDisplayMessage(ELEVATOR_NOT_BELOW_27);
 		} else {
 			CTrueTalkTriggerActionMsg triggerMsg(2, floorNum, 0);
 			triggerMsg.execute("Liftbot");
diff --git a/engines/titanic/game/phonograph_lid.cpp b/engines/titanic/game/phonograph_lid.cpp
index 3741749..d1ab478 100644
--- a/engines/titanic/game/phonograph_lid.cpp
+++ b/engines/titanic/game/phonograph_lid.cpp
@@ -58,7 +58,7 @@ bool CPhonographLid::MouseButtonDownMsg(CMouseButtonDownMsg *msg) {
 
 		_open = !_open;
 	} else {
-		petDisplayMessage(0, "This is the restaurant music system.  It appears to be locked.");
+		petDisplayMessage(0, LOCKED_MUSIC_SYSTEM);
 	}
 
 	return true;
diff --git a/engines/titanic/game/pickup/pick_up_speech_centre.cpp b/engines/titanic/game/pickup/pick_up_speech_centre.cpp
index 5e99c0a..941d5cd 100644
--- a/engines/titanic/game/pickup/pick_up_speech_centre.cpp
+++ b/engines/titanic/game/pickup/pick_up_speech_centre.cpp
@@ -63,7 +63,7 @@ bool CPickUpSpeechCentre::MouseDragStartMsg(CMouseDragStartMsg *msg) {
 			CActMsg actMsg("PlayerGetsSpeechCentre");
 			actMsg.execute("SeasonalAdjust");
 		} else {
-			petDisplayMessage("You can't pick this up on account of it being stuck to the branch.");
+			petDisplayMessage(STUCK_TO_BRANCH);
 		}
 	}
 
diff --git a/engines/titanic/game/sauce_dispensor.cpp b/engines/titanic/game/sauce_dispensor.cpp
index fda7082..410d4a3 100644
--- a/engines/titanic/game/sauce_dispensor.cpp
+++ b/engines/titanic/game/sauce_dispensor.cpp
@@ -75,7 +75,7 @@ bool CSauceDispensor::Use(CUse *msg) {
 			playSound("b#15.wav", 50);
 
 			if (chicken->_string6 != "None") {
-				petDisplayMessage(1, "This foodstuff is already sufficiently garnished.");
+				petDisplayMessage(1, FOODSTUFF_ALREADY_GARNISHED);
 				msg->execute("Chicken");
 			} else {
 				setVisible(true);
@@ -96,7 +96,7 @@ bool CSauceDispensor::Use(CUse *msg) {
 		endMsg.execute(this);
 		playSound("z#120.wav");
 
-		petDisplayMessage(1, "Sadly, this dispenser is currently empty.");
+		petDisplayMessage(1, DISPENSOR_IS_EMPTY);
 	} else if (msg->_item->isEquals("BeerGlass")) {
 		CGlass *glass = dynamic_cast<CGlass *>(msg->_item);
 		_field108 = true;
@@ -157,12 +157,12 @@ bool CSauceDispensor::LeaveViewMsg(CLeaveViewMsg *msg) {
 }
 
 bool CSauceDispensor::MouseButtonDownMsg(CMouseButtonDownMsg *msg) {
-	petDisplayMessage(1, "Please place food source beneath dispenser for sauce delivery.");
+	petDisplayMessage(1, PUT_FOOD_UNDER_DISPENSOR);
 	return true;
 }
 
 bool CSauceDispensor::StatusChangeMsg(CStatusChangeMsg *msg) {
-	petDisplayMessage(1, "Please place food source beneath dispenser for sauce delivery.");
+	petDisplayMessage(1, PUT_FOOD_UNDER_DISPENSOR);
 	return true;
 }
 
diff --git a/engines/titanic/game/seasonal_adjustment.cpp b/engines/titanic/game/seasonal_adjustment.cpp
index 1f1cb88..d9eb0d6 100644
--- a/engines/titanic/game/seasonal_adjustment.cpp
+++ b/engines/titanic/game/seasonal_adjustment.cpp
@@ -81,7 +81,7 @@ bool CSeasonalAdjustment::MouseButtonDownMsg(CMouseButtonDownMsg *msg) {
 bool CSeasonalAdjustment::MouseButtonUpMsg(CMouseButtonUpMsg *msg) {
 	playSound("z#42.wav");
 	if (!_fieldE4) {
-		petDisplayMessage(1, "The Seasonal Adjustment switch is not operational at the present time.");
+		petDisplayMessage(1, SEASONAL_SWITCH_NOT_WORKING);
 	} else if (!_fieldE0) {
 		playMovie(0, 6, MOVIE_NOTIFY_OBJECT);
 		playMovie(6, 18, 0);
diff --git a/engines/titanic/game/sgt/sgt_nav.cpp b/engines/titanic/game/sgt/sgt_nav.cpp
index c004f94..6e3c88e 100644
--- a/engines/titanic/game/sgt/sgt_nav.cpp
+++ b/engines/titanic/game/sgt/sgt_nav.cpp
@@ -59,11 +59,9 @@ bool SGTNav::MouseButtonDownMsg(CMouseButtonDownMsg *msg) {
 
 		changeView("SGTState.Node 2.E");
 	} else if (_statics->_v1 == "Open") {
-		petDisplayMessage(1, "This is your stateroom. It is for sleeping. If you desire "
-			"entertainment or relaxation, please visit your local leisure lounge.");
+		petDisplayMessage(1, YOUR_STATEROOM);
 	} else if (_statics->_v6 == "Closed") {
-		petDisplayMessage(1, "The bed will not currently support your weight."
-			" We are working on this problem but are unlikely to be able to fix it.");
+		petDisplayMessage(1, BED_NOT_SUPPORT_YOUR_WEIGHT);
 	}
 
 	return true;
diff --git a/engines/titanic/game/sgt/sgt_state_room.cpp b/engines/titanic/game/sgt/sgt_state_room.cpp
index c089e40..02f1723 100644
--- a/engines/titanic/game/sgt/sgt_state_room.cpp
+++ b/engines/titanic/game/sgt/sgt_state_room.cpp
@@ -105,7 +105,7 @@ bool CSGTStateRoom::ActMsg(CActMsg *msg) {
 	uint assignedRoom = pet->getAssignedRoomFlags();
 
 	if (roomFlags != assignedRoom) {
-		petDisplayMessage("This is not your assigned room. Please do not enjoy.");
+		petDisplayMessage(NOT_YOUR_ASSIGNED_ROOM);
 	} else if (_fieldE0) {
 		CTurnOn onMsg;
 		onMsg.execute(this);
diff --git a/engines/titanic/game/speech_dispensor.cpp b/engines/titanic/game/speech_dispensor.cpp
index 20ff3c6..3554c48 100644
--- a/engines/titanic/game/speech_dispensor.cpp
+++ b/engines/titanic/game/speech_dispensor.cpp
@@ -68,7 +68,7 @@ bool CSpeechDispensor::FrameMsg(CFrameMsg *msg) {
 	CGameObject *dragObject = getDraggingObject();
 	if (!_dragItem && dragObject && getView() == findView()) {
 		if (dragObject->isEquals("Perch")) {
-			petDisplayMessage(1, "This stick is too short to reach the branches.");
+			petDisplayMessage(1, TOO_SHORT_TO_REACH_BRANCHES);
 			return true;
 		}
 
@@ -86,7 +86,7 @@ bool CSpeechDispensor::FrameMsg(CFrameMsg *msg) {
 		case 0:
 			playSound("z#93.wav");
 			if (_seasonNum == SEASON_WINTER) {
-				petDisplayMessage(1, "You cannot get this, it is frozen to the branch.");
+				petDisplayMessage(1, FROZEN_TO_BRANCH);
 				_fieldE0 = false;
 				_state = 1;
 			} else {
@@ -121,9 +121,9 @@ bool CSpeechDispensor::MouseButtonUpMsg(CMouseButtonUpMsg *msg) {
 	if (!_fieldEC) {
 		playSound("z#93.wav");
 		if (_fieldF8) {
-			petDisplayMessage(1, "Sadly, this is out of your reach.");
+			petDisplayMessage(1, OUT_OF_REACH);
 		} else {
-			petDisplayMessage(1, "You can't pick this up on account of it being stuck to the branch.");
+			petDisplayMessage(1, STUCK_TO_BRANCH);
 		}
 	}
 
diff --git a/engines/titanic/game/sweet_bowl.cpp b/engines/titanic/game/sweet_bowl.cpp
index d0a2525..29d8044 100644
--- a/engines/titanic/game/sweet_bowl.cpp
+++ b/engines/titanic/game/sweet_bowl.cpp
@@ -60,7 +60,7 @@ bool CSweetBowl::ActMsg(CActMsg *msg) {
 	}
 
 	petDisplayMessage(isEquals("BowlNutsRustler") ?
-		"A bowl of pistachio nuts." : "Not a bowl of pistachio nuts.");
+		BOWL_OF_NUTS : NOT_A_BOWL_OF_NUTS);
 	return true;
 }
 
diff --git a/engines/titanic/game/third_class_canal.cpp b/engines/titanic/game/third_class_canal.cpp
index 97b559e..5bc2ede 100644
--- a/engines/titanic/game/third_class_canal.cpp
+++ b/engines/titanic/game/third_class_canal.cpp
@@ -39,7 +39,7 @@ void CThirdClassCanal::load(SimpleFile *file) {
 }
 
 bool CThirdClassCanal::MouseButtonDownMsg(CMouseButtonDownMsg *msg) {
-	petDisplayMessage("This area is off limits to passengers.");
+	petDisplayMessage(AREA_OFF_LIMIT_TO_PASSENGERS);
 	return true;
 }
 
diff --git a/engines/titanic/game/transport/lift_indicator.cpp b/engines/titanic/game/transport/lift_indicator.cpp
index 7471aff..10d62a0 100644
--- a/engines/titanic/game/transport/lift_indicator.cpp
+++ b/engines/titanic/game/transport/lift_indicator.cpp
@@ -74,9 +74,7 @@ bool CLiftindicator::EnterViewMsg(CEnterViewMsg *msg) {
 		petSetRemoteTarget();
 		petSetArea(PET_REMOTE);
 
-		CString str = CString::format("You are standing outside Elevator %d",
-			petGetRoomsWellEntry());
-		petDisplayMessage(-1, str);
+		petDisplayMessage(OUTSIDE_ELEVATOR_NUM, petGetRoomsWellEntry());
 
 		debugC(kDebugScripts, "Claiming PET - %d, Multiplier = %f",
 			_liftNum, multiplier);
@@ -149,14 +147,13 @@ bool CLiftindicator::PETActivateMsg(CPETActivateMsg *msg) {
 
 	if (msg->_name == "Lift") {
 		if (petDoorOrBellbotPresent()) {
-			petDisplayMessage(1, "I'm sorry, you cannot enter this elevator at present "
-				"as a bot is in the way.");
+			petDisplayMessage(1, BOT_BLOCKING_ELEVATOR);
 		} else {
 			_endFrame = pet->getRoomsFloorNum();
 			
 			if (petGetRoomsWellEntry() == 4 && !CLift::_v6
 					&& pet->getRoomsFloorNum() != CLift::_elevator4Floor) {
-				petDisplayMessage(1, "This elevator is currently in an advanced state of non-functionality.");
+				petDisplayMessage(1, ELEVATOR_NON_FUNCTIONAL);
 			} else {
 				_start = _indicatorPos.y + (int)(_startFrame * multiplier);
 				_end = _indicatorPos.y + (int)(_endFrame * multiplier);
diff --git a/engines/titanic/game/transport/pellerator.cpp b/engines/titanic/game/transport/pellerator.cpp
index e4af40c..23c61ad 100644
--- a/engines/titanic/game/transport/pellerator.cpp
+++ b/engines/titanic/game/transport/pellerator.cpp
@@ -67,9 +67,9 @@ bool CPellerator::StatusChangeMsg(CStatusChangeMsg *msg) {
 	int newDest = msg->_newStatus;
 
 	if (msg->_newStatus == _destination) {
-		petDisplayMessage(1, "You are already at your chosen destination.");
+		petDisplayMessage(1, ALREADY_AT_DESTINATION);
 	} else if (classNum == 3 || (msg->_newStatus > 4 && classNum != 1)) {
-		petDisplayMessage(1, "Passengers of your class are not permitted to enter this area.");
+		petDisplayMessage(1, CLASS_NOT_ALLOWED_AT_DEST);
 	} else if (newDest > _destination) {
 		CString name = getName();
 		changeView(name == "PelleratorObject2" ?
diff --git a/engines/titanic/game/wheel_hotspot.cpp b/engines/titanic/game/wheel_hotspot.cpp
index 544e6f5..aeca713 100644
--- a/engines/titanic/game/wheel_hotspot.cpp
+++ b/engines/titanic/game/wheel_hotspot.cpp
@@ -69,7 +69,7 @@ bool CWheelHotSpot::MouseButtonDownMsg(CMouseButtonDownMsg *msg) {
 			break;
 		}
 	} else if (_fieldE4 == 3) {
-		petDisplayMessage("Go where?");
+		petDisplayMessage(GO_WHERE);
 	}
 
 	return true;
diff --git a/engines/titanic/module.mk b/engines/titanic/module.mk
index 01ad617..87f4124 100644
--- a/engines/titanic/module.mk
+++ b/engines/titanic/module.mk
@@ -463,6 +463,7 @@ MODULE_OBJS := \
 	support/font.o \
 	support/image.o \
 	support/image_decoders.o \
+	support/strings.o \
 	support/mouse_cursor.o \
 	support/movie.o \
 	support/movie_clip.o \
diff --git a/engines/titanic/moves/call_pellerator.cpp b/engines/titanic/moves/call_pellerator.cpp
index 0dd8195..75edd50 100644
--- a/engines/titanic/moves/call_pellerator.cpp
+++ b/engines/titanic/moves/call_pellerator.cpp
@@ -47,7 +47,7 @@ bool CCallPellerator::EnterViewMsg(CEnterViewMsg *msg) {
 	CString name = getFullViewName();
 
 	if (name == "TopOfWell.Node 6.S") {
-		petDisplayMessage(2, "You are standing outside the Pellerator.");
+		petDisplayMessage(2, STANDING_OUTSIDE_PELLERATOR);
 	}
 
 	petSetRemoteTarget();
@@ -64,7 +64,7 @@ bool CCallPellerator::PETActivateMsg(CPETActivateMsg *msg) {
 
 	if (msg->_name == "Pellerator") {
 		if (petDoorOrBellbotPresent()) {
-			petDisplayMessage("I'm sorry, you cannot enter this pellerator at present as a bot is in the way.");
+			petDisplayMessage(BOT_BLOCKING_PELLERATOR);
 		} else if (name == "Bar.Node 1.S") {
 			changeView("Pellerator.Node 1.S");
 		} else {
diff --git a/engines/titanic/moves/enter_exit_first_class_state.cpp b/engines/titanic/moves/enter_exit_first_class_state.cpp
index 34e9984..efdead5 100644
--- a/engines/titanic/moves/enter_exit_first_class_state.cpp
+++ b/engines/titanic/moves/enter_exit_first_class_state.cpp
@@ -52,12 +52,11 @@ bool CEnterExitFirstClassState::MouseButtonDownMsg(CMouseButtonDownMsg *msg) {
 		break;
 
 	case 2:
-		petDisplayMessage(1, "This room is reserved for the exclusive use of first class passengeres."
-			" That does not currently include you");
+		petDisplayMessage(1, ROOM_RESERVED_FOR_FIRST_CLASS);
 		break;
 
 	default:
-		petDisplayMessage("No losers.");
+		petDisplayMessage(NO_LOSERS);
 		break;
 	}
 
diff --git a/engines/titanic/moves/enter_sec_class_state.cpp b/engines/titanic/moves/enter_sec_class_state.cpp
index 2a35621..853a00d 100644
--- a/engines/titanic/moves/enter_sec_class_state.cpp
+++ b/engines/titanic/moves/enter_sec_class_state.cpp
@@ -50,7 +50,7 @@ void CEnterSecClassState::load(SimpleFile *file) {
 bool CEnterSecClassState::MouseButtonDownMsg(CMouseButtonDownMsg *msg) {
 	if (getPassengerClass() > 2) {
 		playSound("b#105.wav");
-		petDisplayMessage(1, "Passengers of your class are not permitted to enter this area.");
+		petDisplayMessage(1, CLASS_NOT_PERMITTED_IN_AREA);
 	} else if (!compareRoomNameTo("SecClassLittleLift") || _mode == 2)  {
 		CActMsg actMsg(getFullViewName().deleteRight(3) + ".S");
 		actMsg.execute("SecClassRoomLeaver");
diff --git a/engines/titanic/moves/exit_pellerator.cpp b/engines/titanic/moves/exit_pellerator.cpp
index 12ca2c1..3140d90 100644
--- a/engines/titanic/moves/exit_pellerator.cpp
+++ b/engines/titanic/moves/exit_pellerator.cpp
@@ -94,7 +94,7 @@ bool CExitPellerator::MouseButtonDownMsg(CMouseButtonDownMsg *msg) {
 			changeView(_statics->_isWinter ? "FrozenArboretum.Node 4.S" : "Arboretum.Node 4.W");
 			break;
 		default:
-			petDisplayMessage(2, "Please exit from the other side.");
+			petDisplayMessage(2, EXIT_FROM_OTHER_SIDE);
 			CPellerator::_soundHandle = queueSound("z#438.wav", CPellerator::_soundHandle);
 
 		}
@@ -116,7 +116,7 @@ bool CExitPellerator::MouseButtonDownMsg(CMouseButtonDownMsg *msg) {
 		if (_statics->_v2 == 2) {
 			changeView("Bar.Node 1.N");
 		} else {
-			petDisplayMessage(2, "Please exit from the other side.");
+			petDisplayMessage(2, EXIT_FROM_OTHER_SIDE);
 			CPellerator::_soundHandle = queueSound("z#438.wav", CPellerator::_soundHandle);
 		}
 	}
diff --git a/engines/titanic/moves/exit_tiania.cpp b/engines/titanic/moves/exit_tiania.cpp
index fb0f149..63c1cba 100644
--- a/engines/titanic/moves/exit_tiania.cpp
+++ b/engines/titanic/moves/exit_tiania.cpp
@@ -54,8 +54,7 @@ void CExitTiania::load(SimpleFile *file) {
 
 bool CExitTiania::MouseButtonDownMsg(CMouseButtonDownMsg *msg) {
 	if (getPassengerClass() == 4) {
-		petDisplayMessage(1, "For mysterious and unknowable reasons, "
-			"this transport is temporarily out of order.");
+		petDisplayMessage(1, TRANSPORT_OUT_OF_ORDER);
 	} else {
 		lockMouse();
 		for (int idx = 0; idx < 3; ++idx)
diff --git a/engines/titanic/moves/restricted_move.cpp b/engines/titanic/moves/restricted_move.cpp
index 37cb1c4..b1040a3 100644
--- a/engines/titanic/moves/restricted_move.cpp
+++ b/engines/titanic/moves/restricted_move.cpp
@@ -52,10 +52,10 @@ bool CRestrictedMove::MouseButtonDownMsg(CMouseButtonDownMsg *msg) {
 		// Okay to change to the given destination
 		changeView(_destination);
 	} else if (classNum != 4) {
-		petDisplayMessage(1, "Passengers of your class are not permitted to enter this area.");
+		petDisplayMessage(1, CLASS_NOT_ALLOWED_AT_DEST);
 	} else if (compareRoomNameTo("EmbLobby")) {
 		playSound("a#17.wav");
-		petDisplayMessage(1, "Please check in at the reception desk.");
+		petDisplayMessage(1, CHECK_IN_AT_RECEPTION);
 	} else if (compareViewNameTo("Titania.Node 1.S")) {
 		playSound("z#226.wav");
 		changeView(_destination);
diff --git a/engines/titanic/moves/trip_down_canal.cpp b/engines/titanic/moves/trip_down_canal.cpp
index e9818fa..010505a 100644
--- a/engines/titanic/moves/trip_down_canal.cpp
+++ b/engines/titanic/moves/trip_down_canal.cpp
@@ -43,7 +43,7 @@ void CTripDownCanal::load(SimpleFile *file) {
 
 bool CTripDownCanal::MouseButtonDownMsg(CMouseButtonDownMsg *msg) {
 	if (stateGetSeason() == SEASON_WINTER) {
-		petDisplayMessage("Sadly, the Grand Canal transport system is closed for the winter.");
+		petDisplayMessage(CANAL_CLOSED_FOR_WINTER);
 	} else if (getGameManager()) {
 		changeView(_destination);
 	}
diff --git a/engines/titanic/npcs/bilge_succubus.cpp b/engines/titanic/npcs/bilge_succubus.cpp
index 16064bf..d1b89e5 100644
--- a/engines/titanic/npcs/bilge_succubus.cpp
+++ b/engines/titanic/npcs/bilge_succubus.cpp
@@ -81,7 +81,7 @@ bool CBilgeSuccUBus::PETReceiveMsg(CPETReceiveMsg *msg) {
 
 		playSound("z#28.wav", 70);
 	} else if (!_enabled) {
-		petDisplayMessage(2, "The Succ-U-Bus is in Standby, or \"Off\" mode at present.");
+		petDisplayMessage(2, SUCCUBUS_IS_IN_STANDBY);
 		return false;
 	} else if (!pet) {
 		return false;
@@ -96,7 +96,7 @@ bool CBilgeSuccUBus::PETReceiveMsg(CPETReceiveMsg *msg) {
 			if (_startFrame4 >= 0)
 				playMovie(_startFrame4, _endFrame4, MOVIE_GAMESTATE);
 		} else {
-			petDisplayMessage(2, "There is currently nothing to deliver.");
+			petDisplayMessage(2, NOTHING_TO_DELIVER);
 		}
 	}
 
@@ -112,7 +112,7 @@ bool CBilgeSuccUBus::PETDeliverMsg(CPETDeliverMsg *msg) {
 	CGameObject *mailObject = findMail(petRoomFlags);
 
 	if (!mailObject) {
-		petDisplayMessage(2, "There is currently nothing in the tray to send.");
+		petDisplayMessage(2, NOTHING_IN_SUCCUBUS_TRAY);
 		return true;
 	}
 
@@ -329,7 +329,7 @@ bool CBilgeSuccUBus::SubAcceptCCarryMsg(CSubAcceptCCarryMsg *msg) {
 
 	uint petRoomFlags = pet->getRoomFlags();
 	if (mailExists(petRoomFlags)) {
-		petDisplayMessage(2, "The Succ-U-Bus is a Single Entity Delivery Device.");
+		petDisplayMessage(2, SUCCUBUS_SINGLE_DELIVERY);
 		item->petAddToInventory();
 		return true;
 	}
@@ -387,7 +387,7 @@ bool CBilgeSuccUBus::EnterViewMsg(CEnterViewMsg *msg) {
 }
 
 bool CBilgeSuccUBus::LeaveViewMsg(CLeaveViewMsg *msg) {
-	petDisplayMessage(2, "");
+	petDisplayMessage(2, BLANK);
 	petClear();
 
 	if (_soundHandle != -1) {
diff --git a/engines/titanic/npcs/deskbot.cpp b/engines/titanic/npcs/deskbot.cpp
index 5b6364f..8f1fc28 100644
--- a/engines/titanic/npcs/deskbot.cpp
+++ b/engines/titanic/npcs/deskbot.cpp
@@ -176,12 +176,12 @@ bool CDeskbot::TrueTalkTriggerActionMsg(CTrueTalkTriggerActionMsg *msg) {
 
 		switch (_classNum) {
 		case 1:
-			petDisplayMessage("You have been upgraded to 1st Class status. Enjoy hugely.");
+			petDisplayMessage(UPGRADED_TO_FIRST_CLASS);
 			setPassengerClass(_classNum);
 			petReassignRoom(_classNum);
 			break;
 		case 2:
-			petDisplayMessage("You have been upgraded to 2nd Class status. Enjoy.");
+			petDisplayMessage(UPGRADED_TO_SECOND_CLASS);
 			setPassengerClass(_classNum);
 			petReassignRoom(_classNum);
 			break;
diff --git a/engines/titanic/npcs/succubus.cpp b/engines/titanic/npcs/succubus.cpp
index 5588d86..453f016 100644
--- a/engines/titanic/npcs/succubus.cpp
+++ b/engines/titanic/npcs/succubus.cpp
@@ -274,7 +274,7 @@ bool CSuccUBus::SubAcceptCCarryMsg(CSubAcceptCCarryMsg *msg) {
 	if (!_enabled || !pet || !item || !tempRect.contains(item->getControid())) {
 		item->petAddToInventory();
 	} else if (mailExists(roomFlags)) {
-		petDisplayMessage("The Succ-U-Bus is a Single Entity Delivery Device.");
+		petDisplayMessage(SUCCUBUS_DESCRIPTION);
 		item->petAddToInventory();
 	} else {
 		petContainerRemove(item);
@@ -337,7 +337,7 @@ bool CSuccUBus::EnterViewMsg(CEnterViewMsg *msg) {
 }
 
 bool CSuccUBus::LeaveViewMsg(CLeaveViewMsg *msg) {
-	petDisplayMessage(2, "");
+	petDisplayMessage(2, BLANK);
 	if (_startFrame8 >= 0)
 		loadFrame(_startFrame8);
 	else if (!_field15C && _startFrame9 >= 0)
@@ -370,7 +370,7 @@ bool CSuccUBus::PETDeliverMsg(CPETDeliverMsg *msg) {
 		return true;
 
 	if (!_enabled) {
-		petDisplayMessage(2, "The Succ-U-Bus is in Standby, or \"Off\" mode at present.");
+		petDisplayMessage(2, SUCCUBUS_IS_IN_STANDBY);
 		return true;
 	}
 
@@ -394,7 +394,7 @@ bool CSuccUBus::PETDeliverMsg(CPETDeliverMsg *msg) {
 			break;
 		}
 
-		petDisplayMessage(2, "There is currently nothing in the tray to send.");
+		petDisplayMessage(2, NOTHING_IN_SUCCUBUS_TRAY);
 	} else {
 		_field19C = 0;
 		
@@ -458,7 +458,7 @@ bool CSuccUBus::PETReceiveMsg(CPETReceiveMsg *msg) {
 	if (_field1D8 || !pet)
 		return true;
 	if (!_enabled) {
-		petDisplayMessage(2, "The Succ-U-Bus is in Standby, or \"Off\" mode at present.");
+		petDisplayMessage(2, SUCCUBUS_IS_IN_STANDBY);
 		return true;
 	}
 
@@ -489,7 +489,7 @@ bool CSuccUBus::PETReceiveMsg(CPETReceiveMsg *msg) {
 
 			playMovie(_startFrame6, _endFrame6, 0);
 			playMovie(_startFrame7, _endFrame7, 0);
-			petDisplayMessage(2, "There is currently nothing to deliver.");
+			petDisplayMessage(2, NOTHING_TO_DELIVER);
 		} else {
 			startTalking(this, 230004, findView());
 
diff --git a/engines/titanic/pet_control/pet_control.cpp b/engines/titanic/pet_control/pet_control.cpp
index 7ab76dd..2ab30af 100644
--- a/engines/titanic/pet_control/pet_control.cpp
+++ b/engines/titanic/pet_control/pet_control.cpp
@@ -376,7 +376,13 @@ bool CPetControl::checkDragEnd(CGameObject *item) const {
 	return _sections[_currentArea]->checkDragEnd(item);
 }
 
-void CPetControl::displayMessage(const CString &msg) const {
+void CPetControl::displayMessage(StringId stringId, int param) const {
+	CString msg = CString::format(_strings[stringId].c_str(), param);
+	_sections[_currentArea]->displayMessage(msg);
+}
+
+void CPetControl::displayMessage(const CString &str, int param) const {
+	CString msg = CString::format(str.c_str(), param);
 	_sections[_currentArea]->displayMessage(msg);
 }
 
diff --git a/engines/titanic/pet_control/pet_control.h b/engines/titanic/pet_control/pet_control.h
index 439a94e..c4b6545 100644
--- a/engines/titanic/pet_control/pet_control.h
+++ b/engines/titanic/pet_control/pet_control.h
@@ -36,6 +36,7 @@
 #include "titanic/pet_control/pet_real_life.h"
 #include "titanic/pet_control/pet_remote.h"
 #include "titanic/pet_control/pet_rooms.h"
+#include "titanic/support/strings.h"
 #include "titanic/room_flags.h"
 
 namespace Titanic {
@@ -67,6 +68,7 @@ private:
 	CRoomItem *_hiddenRoom;
 	Rect _drawBounds;
 	PetEventInfo _timers[2];
+	Strings _strings;
 private:
 	/**
 	 * Returns true if the control is in a valid state
@@ -232,7 +234,12 @@ public:
 	/**
 	 * Display a message
 	 */
-	void displayMessage(const CString &msg) const;
+	void displayMessage(StringId stringId, int param = 0) const;
+
+	/**
+	 * Display a message
+	 */
+	void displayMessage(const CString &str, int param = 0) const;
 
 	/**
 	 * Get the first game object stored in the PET
diff --git a/engines/titanic/pet_control/pet_conversations.cpp b/engines/titanic/pet_control/pet_conversations.cpp
index dc096af..173c586 100644
--- a/engines/titanic/pet_control/pet_conversations.cpp
+++ b/engines/titanic/pet_control/pet_conversations.cpp
@@ -419,7 +419,7 @@ int CPetConversations::canSummonBot(const CString &name) {
 void CPetConversations::summonBot(const CString &name) {
 	if (_petControl) {
 		if (_petControl->getPassengerClass() >= 4) {
-			_petControl->displayMessage("Sorry, you must be at least 3rd class before you can summon for help.");
+			_petControl->displayMessage(AT_LEAST_3RD_CLASS_FOR_HELP);
 		} else {
 			_petControl->summonBot(name, 0);
 		}
diff --git a/engines/titanic/pet_control/pet_load.cpp b/engines/titanic/pet_control/pet_load.cpp
index 04eec54..8e2afc7 100644
--- a/engines/titanic/pet_control/pet_load.cpp
+++ b/engines/titanic/pet_control/pet_load.cpp
@@ -63,7 +63,7 @@ void CPetLoad::execute() {
 		// WORKAROUND: Schedule the savegame to be loaded after frame rendering ends
 		window->loadGame(_savegameSlotNum);
 	} else if (pet) {
-		pet->displayMessage("You must select a game to load first.");
+		pet->displayMessage(SELECT_GAME_TO_LOAD);
 	}
 }
 
diff --git a/engines/titanic/pet_control/pet_save.cpp b/engines/titanic/pet_control/pet_save.cpp
index 9305759..6d0733f 100644
--- a/engines/titanic/pet_control/pet_save.cpp
+++ b/engines/titanic/pet_control/pet_save.cpp
@@ -76,10 +76,10 @@ void CPetSave::execute() {
 
 		if (project) {
 			project->saveGame(_savegameSlotNum, _slotNames[_savegameSlotNum].getText());
-			pet->displayMessage("");
+			pet->displayMessage(BLANK);
 		}
 	} else if (pet) {
-		pet->displayMessage("You must select a game to save first.");
+		pet->displayMessage(SELECT_GAME_TO_SAVE);
 	}
 }
 
diff --git a/engines/titanic/pet_control/pet_starfield.cpp b/engines/titanic/pet_control/pet_starfield.cpp
index 34d696e..3287f98 100644
--- a/engines/titanic/pet_control/pet_starfield.cpp
+++ b/engines/titanic/pet_control/pet_starfield.cpp
@@ -91,7 +91,7 @@ bool CPetStarfield::MouseButtonDownMsg(CMouseButtonDownMsg *msg) {
 			CPETPhotoOnOffMsg photoMsg;
 			photoMsg.execute(_petControl->_remoteTarget);
 		} else {
-			_petControl->displayMessage("Please supply Galactic reference material.");
+			_petControl->displayMessage(SUPPLY_GALACTIC_REFERENCE);
 		}
 	} else if (!_btnSetDest.MouseButtonDownMsg(msg->_mousePos)) {
 		return elementsMouseDown(msg);
diff --git a/engines/titanic/support/strings.cpp b/engines/titanic/support/strings.cpp
new file mode 100644
index 0000000..7664b68
--- /dev/null
+++ b/engines/titanic/support/strings.cpp
@@ -0,0 +1,35 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "titanic/support/strings.h"
+#include "titanic/titanic.h"
+
+namespace Titanic {
+
+Strings::Strings() {
+	Common::SeekableReadStream *r = g_vm->_filesManager->getResource("TEXT/STRINGS");
+	while (r->pos() < r->size())
+		push_back(readStringFromStream(r));
+	delete r;
+}
+
+} // End of namespace Titanic
diff --git a/engines/titanic/support/strings.h b/engines/titanic/support/strings.h
new file mode 100644
index 0000000..1f7187b
--- /dev/null
+++ b/engines/titanic/support/strings.h
@@ -0,0 +1,98 @@
+/* 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef TITANIC_STRINGS_H
+#define TITANIC_STRINGS_H
+
+#include "common/str-array.h"
+
+namespace Titanic {
+
+enum StringId {
+	BLANK,
+	STANDING_OUTSIDE_PELLERATOR,
+	BOT_BLOCKING_PELLERATOR,
+	SUCCUBUS_IS_IN_STANDBY,
+	NOTHING_TO_DELIVER,
+	NOTHING_IN_SUCCUBUS_TRAY,
+	SUCCUBUS_SINGLE_DELIVERY,
+	ONE_ALLOCATED_CHICKEN_PER_CUSTOMER,
+	ONE_CHICKEN_PER_CUSTOMER,
+	UPGRADED_TO_FIRST_CLASS,
+	UPGRADED_TO_SECOND_CLASS,
+	ROOM_RESERVED_FOR_FIRST_CLASS,
+	NO_LOSERS,
+	CLASS_NOT_PERMITTED_IN_AREA,
+	EXIT_FROM_OTHER_SIDE,
+	TRANSPORT_OUT_OF_ORDER,
+	FAN_HAS_BLOWN_A_FUSE,
+	POKE_WITH_LONG_STICK,
+	TOO_SHORT_TO_REACH_BRANCHES,
+	OUTSIDE_ELEVATOR_NUM,
+	BOT_BLOCKING_ELEVATOR,
+	ELEVATOR_NON_FUNCTIONAL,
+	LIGHT_IS_LOOSE,
+	LUMI_GLOW_LIGHTS,
+	ALREADY_HAVE_STICK,
+	GLASS_IS_UNBREAKABLE,
+	FOR_STICK_BREAK_GLASS,
+	DISPENSOR_HAS_UNBREAKABLE_GLASS,
+	CHICKEN_IS_CLEAN,
+	ADJUST_VIEWING_APPARATUS,
+	CANNOT_TAKE_CAGE_LOCKED,
+	ALREADY_AT_DESTINATION,
+	CLASS_NOT_ALLOWED_AT_DEST,
+	AT_LEAST_3RD_CLASS_FOR_HELP,
+	NO_ROOM_ASSIGNED,
+	ELEVATOR_NOT_BELOW_27,
+	SELECT_GAME_TO_LOAD,
+	SELECT_GAME_TO_SAVE,
+	SUPPLY_GALACTIC_REFERENCE,
+	LOCKED_MUSIC_SYSTEM,
+	STUCK_TO_BRANCH,
+	FROZEN_TO_BRANCH,
+	CHECK_IN_AT_RECEPTION,
+	FOODSTUFF_ALREADY_GARNISHED,
+	DISPENSOR_IS_EMPTY,
+	PUT_FOOD_UNDER_DISPENSOR,
+	SEASONAL_SWITCH_NOT_WORKING,
+	YOUR_STATEROOM,
+	BED_NOT_SUPPORT_YOUR_WEIGHT,
+	NOT_YOUR_ASSIGNED_ROOM,
+	OUT_OF_REACH,
+	SUCCUBUS_DESCRIPTION,
+	CANAL_CLOSED_FOR_WINTER,
+	AREA_OFF_LIMIT_TO_PASSENGERS,
+	GO_WHERE,
+	NICE_IF_TAKE_BUT_CANT,
+	BOWL_OF_NUTS,
+	NOT_A_BOWL_OF_NUTS
+};
+
+class Strings : public Common::StringArray {
+public:
+	Strings();
+};
+
+} // End of namespace Titanic
+
+#endif /* TITANIC_STRINGS_H */





More information about the Scummvm-git-logs mailing list