[Scummvm-cvs-logs] scummvm master -> 24aeebc96f50f12a9dacf33c9ce4aceb82011074

dreammaster dreammaster at scummvm.org
Tue Aug 16 03:10:17 CEST 2016


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

Summary:
24aeebc96f TITANIC: Implemented CBomb class


Commit: 24aeebc96f50f12a9dacf33c9ce4aceb82011074
    https://github.com/scummvm/scummvm/commit/24aeebc96f50f12a9dacf33c9ce4aceb82011074
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2016-08-15T21:10:09-04:00

Commit Message:
TITANIC: Implemented CBomb class

Changed paths:
    engines/titanic/game/bomb.cpp
    engines/titanic/game/bomb.h



diff --git a/engines/titanic/game/bomb.cpp b/engines/titanic/game/bomb.cpp
index 9a08f26..b1f3fdc 100644
--- a/engines/titanic/game/bomb.cpp
+++ b/engines/titanic/game/bomb.cpp
@@ -25,17 +25,64 @@
 
 namespace Titanic {
 
+BEGIN_MESSAGE_MAP(CBomb, CBackground)
+	ON_MESSAGE(StatusChangeMsg)
+	ON_MESSAGE(EnterViewMsg)
+	ON_MESSAGE(MouseButtonDownMsg)
+	ON_MESSAGE(EnterRoomMsg)
+	ON_MESSAGE(ActMsg)
+	ON_MESSAGE(TurnOn)
+	ON_MESSAGE(TimerMsg)
+	ON_MESSAGE(TrueTalkGetStateValueMsg)
+	ON_MESSAGE(SetFrameMsg)
+END_MESSAGE_MAP()
+
+static const char *const WAVE_NAMES1[] = {
+	"z#353.wav", "z#339.wav", "z#325.wav", "z#311.wav", "z#297.wav",
+	"z#283.wav", "z#269.wav", "z#255.wav", "z#241.wav"
+};
+
+static const char *const WAVE_NAMES2[] = {
+	"", "z#352.wav", "z#338.wav", "z#324.wav", "z#310.wav", "z#296.wav",
+	"z#281.wav", "z#268.wav", "z#254.wav", "z#240.wav", "", "z#351.wav",
+	"z#337.wav", "z#323.wav", "z#309.wav", "z#295.wav", "z#282.wav",
+	"z#267.wav", "z#253.wav", "z#239.wav"
+};
+
+static const char *const WAVE_NAMES3[100] = {
+	"bombcountdown_c0.wav", "z#355.wav", "z#341.wav",  "z#327.wav", "z#313.wav",
+	"z#299.wav", "z#285.wav", "z#271.wav", "z#257.wav", "z#243.wav",
+	"z#354.wav", "z#350.wav", "z#349.wav", "z#348.wav", "z#347.wav",
+	"z#346.wav", "z#345.wav", "z#344.wav", "z#343.wav", "z#342.wav",
+	"z#340.wav", "z#336.wav", "z#335.wav", "z#334.wav", "z#333.wav",
+	"z#332.wav", "z#331.wav", "z#330.wav", "z#329.wav", "z#328.wav",
+	"z#326.wav", "z#322.wav", "z#321.wav", "z#320.wav", "z#319.wav",
+	"z#318.wav", "z#317.wav", "z#316.wav", "z#315.wav", "z#314.wav",
+	"z#312.wav", "z#308.wav", "z#307.wav", "z#306.wav", "z#305.wav",
+	"z#304.wav", "z#303.wav", "z#302.wav", "z#301.wav", "z#300.wav",
+	"z#298.wav", "z#294.wav", "z#293.wav", "z#292.wav", "z#291.wav",
+	"z#290.wav", "z#289.wav", "z#288.wav", "z#287.wav", "z#286.wav",
+	"z#284.wav", "z#280.wav", "z#279.wav", "z#278.wav", "z#277.wav",
+	"z#276.wav", "z#275.wav", "z#274.wav", "z#273.wav", "z#272.wav",
+	"z#270.wav", "z#266.wav", "z#265.wav", "z#264.wav", "z#263.wav",
+	"z#262.wav", "z#261.wav", "z#260.wav", "z#259.wav", "z#258.wav",
+	"z#256.wav", "z#252.wav", "z#251.wav", "z#250.wav", "z#249.wav",
+	"z#248.wav", "z#247.wav", "z#246.wav", "z#245.wav", "z#244.wav",
+	"z#242.wav", "z#238.wav", "z#237.wav", "z#236.wav", "z#235.wav",
+	"z#234.wav", "z#233.wav", "z#232.wav", "z#231.wav", "z#230.wav",
+};
+
 CBomb::CBomb() : CBackground() {
 	_fieldE0 = 0;
 	_fieldE4 = 0;
 	_fieldE8 = 17;
 	_fieldEC = 9;
 	_fieldF0 = 0;
-	_fieldF4 = 999;
-	_fieldF8 = 0;
+	_countdown = 999;
+	_soundHandle = 0;
 	_fieldFC = 0;
 	_startingTicks = 0;
-	_field104 = 60;
+	_volume = 60;
 }
 
 void CBomb::save(SimpleFile *file, int indent) {
@@ -45,11 +92,11 @@ void CBomb::save(SimpleFile *file, int indent) {
 	file->writeNumberLine(_fieldE8, indent);
 	file->writeNumberLine(_fieldEC, indent);
 	file->writeNumberLine(_fieldF0, indent);
-	file->writeNumberLine(_fieldF4, indent);
-	file->writeNumberLine(_fieldF8, indent);
+	file->writeNumberLine(_countdown, indent);
+	file->writeNumberLine(_soundHandle, indent);
 	file->writeNumberLine(_fieldFC, indent);
 	file->writeNumberLine(_startingTicks, indent);
-	file->writeNumberLine(_field104, indent);
+	file->writeNumberLine(_volume, indent);
 
 	CBackground::save(file, indent);
 }
@@ -61,21 +108,257 @@ void CBomb::load(SimpleFile *file) {
 	_fieldE8 = file->readNumber();
 	_fieldEC = file->readNumber();
 	_fieldF0 = file->readNumber();
-	_fieldF4 = file->readNumber();
-	_fieldF8 = file->readNumber();
+	_countdown = file->readNumber();
+	_soundHandle = file->readNumber();
 	_fieldFC = file->readNumber();
 	_startingTicks = file->readNumber();
-	_field104 = file->readNumber();
+	_volume = file->readNumber();
 
 	CBackground::load(file);
 }
 
+bool CBomb::StatusChangeMsg(CStatusChangeMsg *msg) {
+	_fieldE4 += msg->_newStatus;
+
+	if (_fieldE4 == 23) {
+		startAnimTimer("Disarmed", 2000);
+		lockMouse();
+	}
+
+	_fieldF0 %= 1000;
+	if (!(_fieldF0 % 20) && _countdown < 995) {
+		int val = getRandomNumber(5) + 25;
+		if (_fieldF0 < 20 || _fieldF0 > 80)
+			val = 28;
+
+		CString name;
+		switch (val - 25) {
+		case 0:
+			name = "z#372.wav";
+			break;
+		case 1:
+			name = "z#371.wav";
+			break;
+		case 2:
+			name = "z#370.wav";
+			break;
+		case 3:
+			name = "z#369.wav";
+			break;
+		case 4:
+			name = "z#368.wav";
+			break;
+		default:
+			name = "z#366.wav";
+			break;
+		}
+
+		_soundHandle = queueSound(name, _soundHandle, _volume);
+	}
+
+	return true;
+}
+
+bool CBomb::EnterViewMsg(CEnterViewMsg *msg) {
+	_fieldE4 = 2;
+	return true;
+}
+
+bool CBomb::MouseButtonDownMsg(CMouseButtonDownMsg *msg) {
+	playSound("z#62.wav");
+
+	if (_fieldE0) {
+		stopSound(_soundHandle);
+		if (_fieldE4 < 23) {
+			_fieldE8 = MIN(_fieldE8 + 1, 23);
+
+			CString name;
+			switch (_fieldE8) {
+			case 18:
+				name = "z#380.wav";
+				break;
+			case 19:
+				name = "z#379.wav";
+				break;
+			case 20:
+				name = "z#377.wav";
+				break;
+			case 21:
+				name = "z#376.wav";
+				break;
+			case 22:
+				name = "z#375.wav";
+				break;
+			default:
+				name = "z#374.wav";
+				break;
+			}
+
+			_soundHandle = queueSound(name, _soundHandle, _volume);
+			_countdown = 999;
+		}
+	} else {
+		_soundHandle = playSound("z#389.wav", _volume);
+		_fieldE0 = true;
+		CActMsg actMsg("Arm Bomb");
+		actMsg.execute("EndExplodeShip");
+	}
+
+	return true;
+}
+
 bool CBomb::EnterRoomMsg(CEnterRoomMsg *msg) {
-	_fieldE8 = 12;
+	_fieldE8 = 17;
 	_fieldEC = 9;
 	_fieldF0 = 0;
 	_startingTicks = g_vm->_events->getTicksCount();
 	return true;
 }
 
+bool CBomb::ActMsg(CActMsg *msg) {
+	if (msg->_action == "Hit") {
+		playSound("z#63.wav");
+		stopSound(_soundHandle);
+
+		if (_fieldEC < 17)
+			++_fieldEC;
+
+		CString name;
+		switch (_fieldEC) {
+		case 10:
+			name = "z#388.wav";
+			break;
+		case 11:
+			name = "z#387.wav";
+			break;
+		case 12:
+			name = "z#386.wav";
+			break;
+		case 13:
+			name = "z#385.wav";
+			break;
+		case 14:
+			name = "z#384.wav";
+			break;
+		case 15:
+			name = "z#383.wav";
+			break;
+		case 16:
+			name = "z#382.wav";
+			break;
+		default:
+			name = "z#381.wav";
+			break;
+		}
+
+		_soundHandle = queueSound(name, _soundHandle, _volume);
+		_countdown = 999;
+	}
+
+	return true;
+}
+
+bool CBomb::TurnOn(CTurnOn *msg) {
+	if (!_fieldE0) {
+		_soundHandle = playSound("z#389.wav", _volume);
+		_fieldE0 = true;
+
+		CActMsg actMsg("Arm Bomb");
+		actMsg.execute("EndExplodeShip");
+		addTimer(0);
+	}
+
+	changeView("Titania.Node 8.W", "");
+	CActMsg actMsg("Titania.Node 8.N");
+	actMsg.execute("BombNav");
+	actMsg.execute("EnterBombRoom");
+
+	return true;
+}
+
+bool CBomb::TimerMsg(CTimerMsg *msg) {
+	if (msg->_action == "Disarmed") {
+		stopSound(_soundHandle);
+		playSound("z#364.wav", _volume);
+
+		CActMsg actMsg1("Disarm Bomb");
+		actMsg1.execute("EndExplodeShip");
+		_fieldE0 = false;
+		CActMsg actMsg2("Titania.Node 5.N");
+		actMsg2.execute("BombNav");
+		actMsg2.execute("EnterBombNav");
+
+		changeView("Titania.Node 8.W", "");
+		changeView("Titania.Node 13.N", "");
+		unlockMouse();
+	}
+
+	if (compareRoomNameTo("Titania")) {
+		if (msg->_actionVal == 1 && getRandomNumber(9) == 0) {
+			if (!_fieldE0)
+				return true;
+
+			CParrotSpeakMsg speakMsg("Bomb", "BombCountdown");
+			speakMsg.execute("PerchedParrot");
+		}
+
+		if (_fieldE0) {
+			if (isSoundActive(_soundHandle)) {
+				if (msg->_actionVal == 0) {
+					addTimer(1, 1000, 0);
+				} else {
+					_soundHandle = 0;
+					int section = _countdown / 100;
+					int index = _countdown % 100;
+
+					if (_countdown >= 100) {
+						CString name1 = index ? WAVE_NAMES2[section] :
+							WAVE_NAMES1[section];
+						playSound(name1, _volume);
+					}
+
+					CString name2 = WAVE_NAMES3[index];
+					if (_countdown == 10) {
+						name2 = "z#229.wav";
+						_countdown = 998;
+					}
+
+					if (_soundHandle > 0) {
+						_soundHandle = queueSound(name2, _soundHandle, _volume);
+					} else {
+						_soundHandle = playSound(name2, _volume);
+					}
+
+					--_countdown;
+					addTimer(0, 1000, 0);
+				}
+			} else {
+				addTimer(0, 100, 0);
+			}
+		}
+	} else {
+		if (_fieldE0) {
+			--_countdown;
+			addTimer(6000);
+
+			if (_countdown < 11)
+				_countdown = getRandomNumber(900) + 50;
+		}
+	}
+
+	return true;
+}
+
+bool CBomb::TrueTalkGetStateValueMsg(CTrueTalkGetStateValueMsg *msg) {
+	if (msg->_stateNum == 10)
+		msg->_stateVal = _fieldE0;
+
+	return true;
+}
+
+bool CBomb::SetFrameMsg(CSetFrameMsg *msg) {
+	_volume = msg->_frameNumber;
+	return true;
+}
+
 } // End of namespace Titanic
diff --git a/engines/titanic/game/bomb.h b/engines/titanic/game/bomb.h
index ab4df16..f78c42c 100644
--- a/engines/titanic/game/bomb.h
+++ b/engines/titanic/game/bomb.h
@@ -29,18 +29,27 @@
 namespace Titanic {
 
 class CBomb : public CBackground {
+	bool StatusChangeMsg(CStatusChangeMsg *msg);
+	bool EnterViewMsg(CEnterViewMsg *msg);
+	bool MouseButtonDownMsg(CMouseButtonDownMsg *msg);
 	bool EnterRoomMsg(CEnterRoomMsg *msg);
+	bool ActMsg(CActMsg *msg);
+	bool TurnOn(CTurnOn *msg);
+	bool TimerMsg(CTimerMsg *msg);
+	bool TrueTalkGetStateValueMsg(CTrueTalkGetStateValueMsg *msg);
+	bool SetFrameMsg(CSetFrameMsg *msg);
+	DECLARE_MESSAGE_MAP;
 private:
 	int _fieldE0;
 	int _fieldE4;
 	int _fieldE8;
 	int _fieldEC;
 	int _fieldF0;
-	int _fieldF4;
-	int _fieldF8;
+	int _countdown;
+	int _soundHandle;
 	int _fieldFC;
 	int _startingTicks;
-	int _field104;
+	int _volume;
 public:
 	CLASSDEF;
 	CBomb();






More information about the Scummvm-git-logs mailing list