예제 #1
0
bool CBarbot::MovieFrameMsg(CMovieFrameMsg *msg) {
	if (msg->_frameNumber == _frames[29]._startFrame) {
		playSound("c#2.wav", _volume);

	} else if (msg->_frameNumber == _frames[55]._startFrame
			|| msg->_frameNumber == _frames[32]._startFrame) {
		// Finished giving the Barbot a glass
		CStatusChangeMsg statusMsg;
		statusMsg._newStatus = 0;
		statusMsg.execute("PickUpGlass");

		if (_glassContent == GG_EMPTY) {
			// I'd rather see that full of Starling Puret
			startTalking(this, 250574);
		} else if (_glassContent > GG_EMPTY) {
			// What's this?
			startTalking(this, 250580);
			petSetArea(PET_CONVERSATION);
		}

		_glassContent = GG_DEFAULT;

	} else if (msg->_frameNumber == _frames[36]._startFrame) {
		CVisibleMsg visibleMsg(false);
		visibleMsg.execute("LemonOnBar");

	} else if (msg->_frameNumber == _frames[35]._startFrame) {
		CVisibleMsg visibleMsg(false);
		visibleMsg.execute("TVOnBar");
	}

	return true;
}
예제 #2
0
bool CShipSetting::MouseDragStartMsg(CMouseDragStartMsg *msg) {
	if (!checkStartDragging(msg))
		return false;
	if (_itemName == "NULL")
		return true;

	CTurnOff offMsg;
	offMsg.execute(_target);

	if (isEquals("ChickenSetting") || _itemName == "ChickenBridge") {
		CActMsg actMsg("IncreaseQuantity");
		actMsg.execute("ChickenDispenser");
	}

	if (_itemName != "NULL") {
		CPassOnDragStartMsg passMsg(msg->_mousePos, 1);
		passMsg.execute(_itemName);

		msg->_dragItem = getRoot()->findByName(_itemName);

		CVisibleMsg visibleMsg(true);
		visibleMsg.execute(_itemName);
	}

	CSetFrameMsg frameMsg(0);
	frameMsg.execute(_frameTarget);
	_itemName = "NULL";
	_cursorId = CURSOR_ARROW;
	return true;
}
예제 #3
0
파일: desk.cpp 프로젝트: DrItanium/scummvm
bool CDesk::MovieEndMsg(CMovieEndMsg *msg) {
	if (_statics->_desk == "Open") {
		CVisibleMsg visibleMsg(true);
		visibleMsg.execute("ChestOfDrawers");
	}

	return true;
}
예제 #4
0
파일: bedfoot.cpp 프로젝트: OmerMor/scummvm
bool CBedfoot::TurnOff(CTurnOff *msg) {
	if (_statics->_bedhead == "Closed" || _statics->_bedhead == "ClosedWrong") {
		setVisible(true);
		CVisibleMsg visibleMsg(false);
		visibleMsg.execute("Bedhead");
	}

	if (_statics->_bedfoot == "Open" && _statics->_bedhead == "Closed") {
		_isClosed = true;
		_startFrame = 20;
		if (_statics->_tv == "Closed") {
			_statics->_bedfoot = "Closed";
			_endFrame = 30;
		} else {
			_statics->_bedfoot = "RestingUnderTV";
			_endFrame = 25;
		}

		playMovie(_startFrame, _endFrame, MOVIE_GAMESTATE);
		playSound("b#7.wav");

	} else if (_statics->_bedfoot == "NotOnWashstand" && _statics->_bedhead == "ClosedWrong") {
		_isClosed = true;
		_startFrame = 17;

		if (_statics->_tv == "Closed") {
			_statics->_bedfoot = "Closed";
			_endFrame = 30;
		} else {
			_statics->_bedfoot = "RestingUnderTV";
			_endFrame = 25;
		}

		playMovie(_startFrame, _endFrame, MOVIE_GAMESTATE);
		playSound("b#7.wav");

	} else if (_statics->_bedfoot == "RestingUTV" && _statics->_tv == "Closed") {
		_statics->_bedfoot = "Closed";
		_startFrame = 25;
		_endFrame = 30;
		playMovie(25, 30, MOVIE_GAMESTATE);
		playSound("b#7.wav");
	}

	if (_statics->_bedfoot == "Closed")
		_statics->_bedhead = "Closed";

	return true;
}
예제 #5
0
bool CUpLighter::MovieEndMsg(CMovieEndMsg *msg) {
	if (_hosePumping) {
		playSound(TRANSLATE("z#47.wav", "z#578.wav"));
		_noseDispensed = true;

		CVisibleMsg visibleMsg(true);
		visibleMsg.execute("NoseHolder");
		CDropZoneLostObjectMsg lostMsg(nullptr);
		lostMsg.execute(this);
		_clipName.clear();
		_itemMatchName = "Nothing";
		_hosePumping = false;
	}

	return true;
}
예제 #6
0
파일: desk.cpp 프로젝트: DrItanium/scummvm
bool CDesk::TurnOff(CTurnOff *msg) {
	if (_statics->_desk == "Open" && _statics->_chestOfDrawers == "Closed"
			&& _statics->_bedhead != "Open") {
		CVisibleMsg visibleMsg(false);
		visibleMsg.execute("ChestOfDrawers");

		_statics->_desk = "Closed";
		_isClosed = true;
		_startFrame = 26;
		_endFrame = 51;
		playMovie(26, 51, MOVIE_WAIT_FOR_FINISH);
		playSound("b#9.wav");
	}

	return true;
}
예제 #7
0
bool CBarbot::TurnOn(CTurnOn *msg) {
	if (!_fieldC4) {
		_field13C = -1;
		setVisible(true);

		CGameObject *glass = findInRoom("BeerGlass");
		if (!_gottenDrunk) {
			CVisibleMsg visibleMsg(false);
			visibleMsg.execute("BarShelfVisCentre");
		}

		if (glass && !_addedPuret) {
			playRange(_frames[38], MOVIE_NOTIFY_OBJECT);
			playRange(_frames[58], MOVIE_NOTIFY_OBJECT);
			playRange(_frames[57], MOVIE_NOTIFY_OBJECT);
			playRange(_frames[56], MOVIE_NOTIFY_OBJECT | MOVIE_WAIT_FOR_FINISH);
			_frameNum = _frames[56]._endFrame;
		} else {
			playRange(_frames[38]);
			playRange(_frames[23], MOVIE_NOTIFY_OBJECT);
			playRange(_frames[21], MOVIE_NOTIFY_OBJECT);
			_frameNum = _frames[21]._endFrame;

			switch (g_vm->getRandomNumber(2)) {
			case 0:
				playRange(_frames[10], MOVIE_NOTIFY_OBJECT);
				_frameNum = _frames[10]._endFrame;
				break;
			case 1:
				playRange(_frames[12], MOVIE_NOTIFY_OBJECT);
				_frameNum = _frames[12]._endFrame;
				break;
			default:
				break;
			}
			_field124 = 0;
		}

		_fieldC4 = 1;
		++_timesCalled;
		petSetArea(PET_CONVERSATION);
		setTalking(this, true);
	}

	return true;
}
예제 #8
0
bool CTelevision::LeaveViewMsg(CLeaveViewMsg *msg) {
	petClear();
	if (_isOn) {
		if (isSoundActive(_soundHandle))
			stopSound(_soundHandle, 0);

		loadFrame(622);
		stopMovie();
		setVisible(0);
		_isOn = false;

		if (compareRoomNameTo("CSGState")) {
			CVisibleMsg visibleMsg(true);
			visibleMsg.execute("Tellypic");
		}
	}

	return true;
}
예제 #9
0
bool CArboretumGate::ActMsg(CActMsg *msg) {
	if (msg->_action == "PlayerGetsSpeechCentre") {
		_v1 = 1;
		CVisibleMsg visibleMsg(true);
		visibleMsg.execute("SpCtrOverlay");
	} else if (msg->_action == "ExitLFrozen") {
		if (_v3) {
			_viewName2 = "FrozenArboretum.Node 2.W";
			CTurnOn onMsg;
			onMsg.execute(this);
		} else {
			changeView("FrozenArboretum.Node 2.W");
		}
	} else if (msg->_action == "ExitRFrozen") {
		if (_v3) {
			_viewName2 = "FrozenArboretum.Node 2.E";
			CTurnOn onMsg;
			onMsg.execute(this);
		} else {
			changeView("FrozenArboretum.Node 2.E");
		}
	} else if (msg->_action == "ExitLNormal") {
		if (_v3) {
			_viewName2 = "Arboretum.Node 2.W";
			CTurnOn onMsg;
			onMsg.execute(this);
		} else {
			changeView("Arboretum.Node 2.W");
		}
	} else if (msg->_action == "ExitRNormal") {
		if (_v3) {
			_viewName2 = "Arboretum.Node 2.E";
			CTurnOn onMsg;
			onMsg.execute(this);
		}
		else {
			changeView("Arboretum.Node 2.E");
		}
	}

	return true;
}
예제 #10
0
bool CBedhead::TurnOff(CTurnOff *msg) {
	if (_statics->_bedhead == "Open") {
		playMovie(78, 85, 0);
		playSound("191_436_bed inflate deflate.wav");
	}

	BedheadEntries *data = nullptr;
	if (_statics->_bedhead == "Open")
		data = &_off._open;
	else if (_statics->_bedhead == "RestingUTV")
		data = &_off._restingUTV;
	else if (_statics->_bedhead == "RestingV")
		data = &_off._restingV;
	else if (_statics->_bedhead == "RestingG")
		data = &_off._restingG;
	else if (_statics->_bedhead == "OpenWrong")
		data = &_off._openWrong;
	else if (_statics->_bedhead == "RestingDWrong")
		data = &_off._restingDWrong;
	else
		return true;

	for (uint idx = 0; idx < data->size(); ++idx) {
		const BedheadEntry &entry = (*data)[idx];
		if ((entry._name1 == _statics->_tv || entry._name1 == "Any")
			&& (entry._name2 == _statics->_vase || entry._name2 == "Any")
			&& (entry._name3 == _statics->_desk || entry._name3 == "Any")) {
			CVisibleMsg visibleMsg(false);
			visibleMsg.execute("Bedfoot");
			setVisible(true);

			_statics->_bedhead = entry._name4;
			playMovie(entry._startFrame, entry._endFrame, MOVIE_NOTIFY_OBJECT | MOVIE_WAIT_FOR_FINISH);
			playSound("193_436_bed fold up 1.wav");
			_isClosed = true;
		}
	}

	return true;
}
예제 #11
0
bool CSuccUBus::MouseDragStartMsg(CMouseDragStartMsg *msg) {
    CPetControl *pet = getPetControl();
    Rect tempRect = _rect1;
    tempRect.translate(_bounds.left, _bounds.top);

    if (_field1D8 || !_enabled || !_field188 || !tempRect.contains(msg->_mousePos)
            || !pet)
        return true;

    uint petRoomFlags = pet->getRoomFlags();
    CGameObject *mailObject = findMail(petRoomFlags);
    if (!mailObject)
        return true;

    petAddToCarryParcel(mailObject);
    CViewItem *view = getView();
    if (!view)
        return true;

    mailObject->moveUnder(view);
    mailObject->setPosition(Point(msg->_mousePos.x + mailObject->_bounds.width() / 2,
                                  msg->_mousePos.y + mailObject->_bounds.height() / 2));

    CVisibleMsg visibleMsg(true);
    visibleMsg.execute(mailObject);
    CPassOnDragStartMsg dragMsg;
    dragMsg._mousePos = msg->_mousePos;
    dragMsg._value3 = 1;
    dragMsg.execute(mailObject);

    if (!dragMsg._value4)
        msg->_dragItem = mailObject;

    loadFrame(_field184);
    _field188 = 0;
    CSUBTransition transMsg;
    transMsg.execute(this);

    return true;
}
예제 #12
0
파일: bedhead.cpp 프로젝트: 86400/scummvm
bool CBedhead::TurnOn(CTurnOn *msg) {
	if (_statics->_v2 == "Closed" || _statics->_v2 == "RestingUnderTV")
		return true;

	const BedheadEntries *data = nullptr;
	if (_statics->_v1 == "Closed")
		data = &_on._closed;
	else if (_statics->_v1 == "RestingTV")
		data = &_on._restingTV;
	else if (_statics->_v1 == "RestingUV")
		data = &_on._restingUV;
	else if (_statics->_v1 == "ClosedWrong")
		data = &_on._closedWrong;
	else
		return true;

	for (uint idx = 0; idx < data->size(); ++idx) {
		const BedheadEntry &entry = (*data)[idx];
		if ((entry._name1 == _statics->_v4 || entry._name1 == "Any")
				&& (entry._name2 == _statics->_v3 || entry._name2 == "Any")
				&& (entry._name3 == _statics->_v5 || entry._name3 == "Any")) {
			CVisibleMsg visibleMsg(false);
			visibleMsg.execute("Bedfoot");
			setVisible(true);

			_statics->_v1 = entry._name4;
			playMovie(entry._startFrame, entry._endFrame, MOVIE_NOTIFY_OBJECT | MOVIE_GAMESTATE);
			playSound("b#6.wav");
			_fieldE0 = false;
		}
	}

	if (_statics->_v1 == "Open") {
		playMovie(71, 78, 0);
		playSound("196_436 bed inflate 2.wav");
	}

	return true;
}
예제 #13
0
bool CBrainSlot::MouseDragStartMsg(CMouseDragStartMsg *msg) {
	if (!_value1 || _woken || !checkPoint(msg->_mousePos, false, true))
		return false;

	_cursorId = CURSOR_ARROW;
	CVisibleMsg visibleMsg(true);
	visibleMsg.execute(_target);
	CTakeHeadPieceMsg takeMsg(_target);
	takeMsg.execute("TitaniaControl");

	loadFrame(isEquals("CentralCoreSlot") ? 21 : 0);
	_value1 = 0;

	CPassOnDragStartMsg passMsg;
	passMsg._mousePos = msg->_mousePos;
	passMsg.execute(_target);

	msg->_dragItem = getRoot()->findByName(_target);
	_added = false;

	return true;
}
예제 #14
0
bool CBedhead::TurnOn(CTurnOn *msg) {
	if (_statics->_bedfoot != "Closed" && _statics->_bedfoot != "RestingUnderTV") {
		const BedheadEntries *data = nullptr;
		if (_statics->_bedhead == "Closed")
			data = &_on._closed;
		else if (_statics->_bedhead == "RestingTV")
			data = &_on._restingTV;
		else if (_statics->_bedhead == "RestingUV")
			data = &_on._restingUV;
		else if (_statics->_bedhead == "ClosedWrong")
			data = &_on._closedWrong;
		else
			return true;

		for (uint idx = 0; idx < data->size(); ++idx) {
			const BedheadEntry &entry = (*data)[idx];
			if ((entry._name1 == _statics->_tv || entry._name1 == "Any")
					&& (entry._name2 == _statics->_vase || entry._name2 == "Any")
					&& (entry._name3 == _statics->_desk || entry._name3 == "Any")) {
				CVisibleMsg visibleMsg(false);
				visibleMsg.execute("Bedfoot");
				setVisible(true);

				_statics->_bedhead = entry._name4;
				playMovie(entry._startFrame, entry._endFrame, MOVIE_NOTIFY_OBJECT | MOVIE_WAIT_FOR_FINISH);
				playSound(TRANSLATE("b#6.wav", "b#91.wav"));
				_isClosed = false;
			}
		}
	}

	if (_statics->_bedhead == "Open") {
		playMovie(71, 78, 0);
		playSound("196_436 bed inflate 2.wav");
	}

	return true;
}
예제 #15
0
bool CTelevision::PETActivateMsg(CPETActivateMsg *msg) {
	if (msg->_name == "Television") {
		CVisibleMsg visibleMsg(_isOn);
		_isOn = !_isOn;

		if (_isOn) {
			setVisible(true);
			playMovie(0, 55, 0);
			_channelNum = 1;
		} else {
			stopMovie();
			if (isSoundActive(_soundHandle))
				stopSound(_soundHandle, 0);

			setVisible(false);
		}

		if (compareRoomNameTo("SGTState"))
			visibleMsg.execute("Tellypic");
	}

	return true;
}
예제 #16
0
bool CArmchair::TurnOn(CTurnOn *msg) {
	if (_statics->_armchair == "Closed" && _statics->_toilet == "Closed") {
		CVisibleMsg visibleMsg(false);
		visibleMsg.execute("Deskchair");

		if (_statics->_deskchair == "Open") {
			CActMsg actMsg("Squash");
			actMsg.execute("Deskchair");
			_startFrame = 22;
			_endFrame = 31;
		} else {
			_startFrame = 0;
			_endFrame = 10;
		}

		playMovie(_startFrame, _endFrame, MOVIE_GAMESTATE);
		playSound("b#0.wav");
		_statics->_armchair = "Open";
		_isClosed = false;
	}

	return true;
}
예제 #17
0
bool CBilgeSuccUBus::MovieEndMsg(CMovieEndMsg *msg) {
	CPetControl *pet = getPetControl();

	if (msg->_endFrame == _trayOutEndFrame) {
		if (_offStartFrame >= 0)
			playSound("z#27.wav");
	} else if (msg->_endFrame == _offEndFrame) {
		if (_endingStartFrame >= 0)
			playSound("z#30.wav");
	} else {
		if (msg->_endFrame == _onEndFrame && pet) {
			if (_style) {
				startTalking(this, getRandomNumber(1) ? 230062 : 230063);
			} else if (!findMail(pet->getRoomFlags())) {
				switch (getRandomNumber(4)) {
				case 0:
					startTalking(this, 230001);
					break;
				case 1:
					startTalking(this, 230002);
					break;
				case 2:
					startTalking(this, 230003);
					break;
				default:
					break;
				}
			}

		} else if (msg->_endFrame == _sendEndFrame) {
			switch (_sendAction) {
			case SA_EATEN:
				stopSound(_soundHandle, 1);
				_soundHandle = playSound("z#3.wav", 1);
				break;
			case SA_BILGE_FEATHERS:
				stopSound(_soundHandle);
				_soundHandle = playSound("z#12.wav");
				break;
			case SA_BILGE_SENT:
				if (_isChicken) {
					startTalking(this, 230018);
					_isChicken = false;
				} else {
					startTalking(this, 230013);
				}
				break;
			case SA_BILGE_EATEN:
				startTalking(this, 230017);
				break;
			default:
				break;
			}

			CSUBTransition transMsg;
			transMsg.execute(this);

		} else if (msg->_endFrame == _receiveEndFrame) {
			if (_mailP) {
				_mailP->petAddToInventory();
				CVisibleMsg visibleMsg(true);
				visibleMsg.execute(_mailP);

				_mailP = nullptr;
				petSetArea(PET_INVENTORY);

				CSUBTransition transMsg;
				transMsg.execute(this);
			}

		} else if (msg->_endFrame == _sneezing1EndFrame) {
			playSound("z#25.wav", 70);
			playSound("z#24.wav", 70);

		} else if (msg->_endFrame == _sneezing2EndFrame) {
			changeView("BilgeRoomWith.Node 1.N", "");
			_style = false;
			resetMail();

			if (_mailP) {
				_mailP->petAddToInventory();
				CVisibleMsg visibleMsg(true);
				visibleMsg.execute(_mailP);

				_mailP = nullptr;
				petSetArea(PET_INVENTORY);
			}

			startTalking(this, 150);
			CBodyInBilgeRoomMsg bodyMsg;
			bodyMsg.execute("Service Elevator Entity");
			decTransitions();
			_sendAction = SA_SENT;

		} else {
			_sendAction = SA_SENT;
		}
	}

	return true;
}
예제 #18
0
bool CBarbot::MovieEndMsg(CMovieEndMsg *msg) {
	if (msg->_endFrame == _frameNum) {
		_frameNum = -1;
		_field14C = getTicksCount();
	}

	if (msg->_endFrame == _field148) {
		_field148 = -1;
		_field150 = getTicksCount();
	}

	if (msg->_endFrame == _field13C) {
		if (_field124)
			playMovie(_frames[53]._startFrame, _frames[53]._startFrame, 0);
		else if (_visCenterOnCounter)
			playMovie(_frames[27]._endFrame, _frames[27]._endFrame, 0);

		_field13C = -1;
		return true;
	}

	if (msg->_endFrame == _frames[58]._endFrame || msg->_endFrame == _frames[21]._endFrame) {
		CVisibleMsg visibleMsg(true);
		visibleMsg.execute("BarShelfVisCentre");
	}

	if (msg->_endFrame == _frames[57]._endFrame) {
		startTalking(this, 250575);
		playSound("c#10.wav", _volume);
		return true;
	}

	if (msg->_endFrame == _frames[55]._endFrame) {
		playSound("c#10.wav", _volume);
		return true;
	}

	if (msg->_endFrame == _frames[56]._endFrame
			|| msg->_endFrame == _frames[54]._endFrame) {
		CStatusChangeMsg statusMsg;
		statusMsg._newStatus = 1;
		statusMsg.execute("PickUpGlass");
		CMoveToStartPosMsg moveMsg;
		moveMsg.execute("BeerGlass");
		return true;
	}

	if (msg->_endFrame == _frames[30]._endFrame) {
		_field124 = 0;
		CStatusChangeMsg statusMsg;
		statusMsg._newStatus = 0;
		statusMsg.execute("PickUpGlass");
	}

	if (msg->_endFrame == _frames[45]._endFrame) {
		if (!_gottenDrunk) {
			CVisibleMsg visibleMsg(false);
			visibleMsg.execute("BarShelfVisCentre");
		}

		return true;
	}

	if (msg->_endFrame == _frames[44]._endFrame) {
		_visCenterOnCounter = true;
		_gottenDrunk = true;
		startTalking(this, 250586);
		CStatusChangeMsg statusMsg;
		statusMsg._newStatus = 1;
		statusMsg.execute("PickUpVisCentre");
		CPuzzleSolvedMsg solvedMsg;
		solvedMsg.execute("VisionCentre");
	}

	if (msg->_endFrame == _frames[46]._endFrame) {
		if (!_gottenDrunk && !areIngredientsMissing())
			startTalking(this, 250571);
		return true;
	}

	if (msg->_endFrame == _frames[43]._endFrame
			|| msg->_endFrame == _frames[42]._endFrame
			|| msg->_endFrame == _frames[41]._endFrame) {
		if (_field124)
			playMovie(_frames[53]._startFrame, _frames[53]._startFrame, 0);
		return true;
	}

	if (msg->_endFrame == _frames[38]._endFrame || msg->_endFrame == _frames[23]._endFrame) {
		playSound("c#3.wav", _volume);
	} else if (msg->_endFrame == _frames[36]._endFrame) {
		playSound("c#6.wav", _volume);
	} else if (msg->_endFrame == _frames[35]._endFrame) {
		playSound("c#8.wav", _volume);
	} else if (msg->_endFrame == _frames[33]._endFrame) {
		playSound("c#4.wav", _volume);
	} else if (msg->_endFrame == _frames[32]._endFrame) {
		startTalking(this, 145);
		playSound("c#9.wav", _volume);
	} else if (msg->_endFrame == _frames[47]._endFrame) {
		playSound("c#9.wav", _volume);
		_addedVodka = true;
		_drunkFlag = true;
	} else if (msg->_endFrame == _frames[30]._endFrame) {
		playSound("c#4.wav", 60);
	} else if (msg->_endFrame == _frames[29]._endFrame) {
		if (!_fieldC4) {
			performAction(true, nullptr);
			setVisible(false);
			CActMsg actMsg("ResetCount");
			actMsg.execute("BarBell");
		}
	} else if (msg->_endFrame == _frames[27]._endFrame) {
		CStatusChangeMsg statusMsg;
		statusMsg._newStatus = 1;
		statusMsg.execute("PickUpVisCentre");
		_visCenterOnCounter = true;
		_field134 = 0;
		startTalking(this, 250586);
	}

	return true;
}
예제 #19
0
bool CBilgeSuccUBus::MovieEndMsg(CMovieEndMsg *msg) {
	CPetControl *pet = getPetControl();

	if (msg->_endFrame == _endFrame12) {
		if (_startFrame10 >= 0)
			playSound("z#27.wav");
	} else if (msg->_endFrame == _endFrame10) {
		if (_startFrame11 >= 0)
			playSound("z#30.wav");
	} else {
		if (_endFrame9 == _endFrame10 && pet) {
			if (_v2) {
				startTalking(this, getRandomNumber(1) ? 230062 : 230063);
			} else if (!findMail(pet->getRoomFlags())) {
				switch (getRandomNumber(4)) {
				case 0:
					startTalking(this, 230001);
					break;
				case 1:
					startTalking(this, 230002);
					break;
				case 2:
					startTalking(this, 230003);
					break;
				default:
					break;
				}
			}
		}

		if (msg->_endFrame == _endFrame3) {
			switch (_field158) {
			case 1:
				stopSound(_soundHandle);
				_soundHandle = playSound("z#3.wav");
				break;
			case 2:
				stopSound(_soundHandle);
				_soundHandle = playSound("z#12.wav");
				break;
			case 3:
				if (_isChicken) {
					startTalking(this, 230018);
					_isChicken = false;
				} else {
					startTalking(this, 230013);
				}
				break;
			case 4:
				startTalking(this, 230017);
				break;
			default:
				break;
			}

			CSUBTransition transMsg;
			transMsg.execute(this);

		} else if (msg->_endFrame == _bilgeEndFrame2) {
			playSound("z#25.wav", 70);
			playSound("z#24.wav", 70);

		} else if (msg->_endFrame == _endFrame4) {
			if (_mailP) {
				_mailP->petAddToInventory();
				CVisibleMsg visibleMsg(true);
				visibleMsg.execute(_mailP);

				_mailP = nullptr;
				petSetArea(PET_INVENTORY);

				CSUBTransition transMsg;
				transMsg.execute(this);
			}

		} else if (msg->_endFrame == _bilgeEndFrame1) {
			changeView("BilgeRoomWith.Node 1.N", "");
			_v2 = 0;
			resetMail();

			if (_mailP) {
				_mailP->petAddToInventory();
				CVisibleMsg visibleMsg(true);
				visibleMsg.execute(_mailP);

				_mailP = nullptr;
				petSetArea(PET_INVENTORY);
			}

			startTalking(this, 150);
			CBodyInBilgeRoomMsg bodyMsg;
			bodyMsg.execute("Service Elevator Entity");
			decTransitions();
			_field158 = 0;

		} else {
			_field158 = 0;
		}
	}

	return true;
}