bool CSGTNavigation::MouseButtonDownMsg(CMouseButtonDownMsg *msg) { if (compareRoomNameTo("SgtLobby")) { _statics->_destView = getRoomNodeName(); _statics->_destRoom = "SgtLobby"; changeView("SGTState.Node 1.S"); } else if (compareRoomNameTo("SGTLittleLift")) { if (_statics->_changeViewNum != 1) { _statics->_destRoom = "SGTLittleLift"; changeView("SGTState.Node 1.S"); } } else if (compareRoomNameTo("SGTState")) { if (_statics->_destRoom == "SgtLobby") { if (compareViewNameTo("SGTState.Node 2.N")) { changeView("SGTState.Node 1.N"); _statics->_destView += ".S"; } else { _statics->_destView += ".N"; } changeView(_statics->_destView); } else if (_statics->_destRoom == "SGTLittleLift") { if (compareViewNameTo("SGTState.Node 1.S")) { changeView("SGTLittleLift.Node 1.N"); } else { changeView("SGTState.Node 1.N"); changeView("SGTLittleLift.Node 1.S"); } } } return true; }
bool CChicken::PETLostObjectMsg(CPETLostObjectMsg *msg) { if (compareViewNameTo("ParrotLobby.Node 1.N")) { CActMsg actMsg("StartChickenDrag"); actMsg.execute("PerchedParrot"); } return true; }
bool CMaitreD::TimerMsg(CTimerMsg *msg) { if (msg->_action == "MD Fight") { if (_field12C && compareViewNameTo("1stClassRestaurant.MaitreD Node.N")) { startTalking(this, 131, findView()); } } else { CTrueTalkNPC::TimerMsg(msg); } return true; }
bool CParrot::NPCPlayTalkingAnimationMsg(CNPCPlayTalkingAnimationMsg *msg) { static const char *const NAMES[] = { "Talking0", "Talking1", "Talking2", "Talking3", "Talking4", "Talking5", "Talking6", "Talking7", nullptr }; if (!(_npcFlags & (NPCFLAG_10000 | NPCFLAG_20000 | NPCFLAG_40000 | NPCFLAG_80000 | NPCFLAG_100000 | NPCFLAG_200000 | NPCFLAG_400000)) && _visible && !_v4) { if (!compareViewNameTo("ParrotLobby.Node 1.N")) msg->_names = NAMES; } return true; }
bool CCarryParrot::MouseDragEndMsg(CMouseDragEndMsg *msg) { stopMovie(); if (msg->_mousePos.y >= 360) { petAddToInventory(); return true; } if (compareViewNameTo("ParrotLobby.Node 1.N")) { if (msg->_mousePos.x >= 75 && msg->_mousePos.x <= 565 && !CParrot::_v2 && !CCage::_open) { setVisible(false); _fieldE0 = 0; CTreeItem *perchedParrot = findUnder(getRoot(), "PerchedParrot"); detach(); addUnder(perchedParrot); sound8(true); CPutParrotBackMsg backMsg(msg->_mousePos.x); backMsg.execute(perchedParrot); } else { setVisible(false); _fieldE0 = 0; CParrot::_v4 = 2; playSound("z#475.wav"); sound8(true); moveUnder(findRoom()); CActMsg actMsg("Shut"); actMsg.execute("ParrotCage"); } } else { CCharacter *character = dynamic_cast<CCharacter *>(msg->_dropTarget); if (character) { CUseWithCharMsg charMsg(character); charMsg.execute(this, nullptr, 0); } else { setVisible(false); _fieldE0 = 0; playSound("z#475.wav"); sound8(true); moveUnder(findRoom()); } } showMouse(); return true; }
bool CLiftbotHead::MouseDragStartMsg(CMouseDragStartMsg *msg) { if (!checkStartDragging(msg)) { return false; } else if (compareViewNameTo("BottomOfWell.Node 8.N")) { changeView("BottomOfWell.Node 13.N"); moveToView(); CActMsg actMsg("LiftbotHeadTaken"); actMsg.execute("BOWLiftbotHeadMonitor"); return CCarry::MouseDragStartMsg(msg); } else if (_flag) { _flag = false; CActMsg actMsg("LoseHead"); actMsg.execute("FaultyLiftbot"); } return CCarry::MouseDragStartMsg(msg); }
bool CGlass::MouseDragEndMsg(CMouseDragEndMsg *msg) { showMouse(); if (msg->_dropTarget) { if (msg->_dropTarget->isPet()) { petAddToInventory(); } else { CCharacter *npc = dynamic_cast<CCharacter *>(msg->_dropTarget); if (npc) { CUseWithCharMsg useMsg(npc); useMsg.execute(this); } else { CUseWithOtherMsg otherMsg(msg->_dropTarget); otherMsg.execute(this); } } } else if (compareViewNameTo(_fullViewName) && msg->_mousePos.y < 360) { setPosition(_origPos); } else { petAddToInventory(); } return true; }
bool CParrot::FrameMsg(CFrameMsg *msg) { if (compareViewNameTo("ParrotLobby.Node 1.N")) return false; if (_v4) return true; Point pt = getMousePos(); CGameObject *dragObject = getDraggingObject(); int xp = _bounds.left + _bounds.width() / 2; if ((_npcFlags & NPCFLAG_400000) && !hasActiveMovie()) { _field128 = xp - (_field124 + _bounds.width() / 2); if (xp < 64) { if (_field134) { CActMsg actMsg("PanAwayFromParrot"); actMsg.execute(_field134); } _npcFlags &= ~(NPCFLAG_10000 | NPCFLAG_20000 | NPCFLAG_40000 | NPCFLAG_80000 | NPCFLAG_100000 | NPCFLAG_200000 | NPCFLAG_400000); return true; } } bool chickenFlag = dragObject && dragObject->isEquals("Chicken"); if (_npcFlags & NPCFLAG_1000000) { if (!chickenFlag || pt.x > 70 || pt.y < 90 || pt.y > 280) { stopMovie(); loadFrame(0); setPosition(Point(-90, _bounds.top)); } } else { if (!chickenFlag) return false; } _field128 = CLIP((int)pt.x, 230, 480); if ((_npcFlags & NPCFLAG_10000) || hasActiveMovie()) return true; if (_field128 > 64) { _npcFlags |= NPCFLAG_10000 | NPCFLAG_20000; if (_field128 >= xp) { setPosition(Point(_bounds.left + 30, _bounds.top)); _npcFlags |= NPCFLAG_200000; playClip("Walk Right Intro", MOVIE_NOTIFY_OBJECT); } else { _npcFlags |= NPCFLAG_100000; playClip("Walk Left Intro", MOVIE_NOTIFY_OBJECT); } } else if (chickenFlag && pt.y >= 90 && pt.y <= 280 && !_field12C) { CParrotTriesChickenMsg triesMsg; triesMsg.execute(dragObject); CTrueTalkTriggerActionMsg triggerMsg; int id; switch (triesMsg._value2) { case 1: id = 280056 + (triesMsg._value1 ? 234 : 0); break; case 2: id = 280055 + (triesMsg._value1 ? 234 : 0); break; case 3: id = 280054 + (triesMsg._value1 ? 234 : 0); break; default: id = 280053 + (triesMsg._value1 ? 234 : 0); break; } if (id < 280266) { if (pt.x < 75) { _npcFlags |= NPCFLAG_1000000; playClip("Walk Left Intro", MOVIE_STOP_PREVIOUS); playClip("Walk Left Loop", MOVIE_NOTIFY_OBJECT); movieEvent(236); chickenFlag = false; } else if ((pt.x - xp) > 15) { _npcFlags |= NPCFLAG_800000; playClip("Peck At Feet Right", MOVIE_NOTIFY_OBJECT); movieEvent(170); } else if ((xp - pt.x) > 15) { _npcFlags |= NPCFLAG_800000; playClip("Peck At Feet Left", MOVIE_NOTIFY_OBJECT); movieEvent(142); } else { _npcFlags |= NPCFLAG_800000; playClip("Peck At Feet", MOVIE_NOTIFY_OBJECT); movieEvent(157); } } if (chickenFlag) { triggerMsg._param2 = 1; triggerMsg.execute(this); _field12C = 1; } } return true; }
bool CParrot::NPCPlayIdleAnimationMsg(CNPCPlayIdleAnimationMsg *msg) { static const char *const NAMES[] = { "Idle0", "Idle1", "Peck At Feet", "Peck At Feet Left" "Peck At Feet Right", nullptr }; if (!(_npcFlags & (NPCFLAG_10000 | NPCFLAG_20000 | NPCFLAG_40000 | NPCFLAG_80000 | NPCFLAG_100000 | NPCFLAG_200000 | NPCFLAG_400000)) && _visible && !_v4 && !compareViewNameTo("ParrotLobby.Node 1.N")) { CGameObject *dragItem = getDraggingObject(); if (!dragItem || dragItem->getName() == "Chicken") { if (!_v5 ||getRandomNumber(3) != 0) { if (getRandomNumber(1)) { startTalking(this, 280267, findView()); } else { msg->_names = NAMES; } } else { int id = -1; switch (stateGet38()) { case 0: id = 280107; break; case 1: id = 280106; break; case 2: id = 280115; break; case 3: id = 280114; break; case 4: id = 280113; break; case 5: id = 280112; break; case 6: id = 280111; break; case 7: id = 280110; break; case 8: id = 280109; break; case 9: id = 280108; break; case 10: id = 280105; break; case 11: id = 280000; break; default: break; } if (id != -1) startTalking(this, id, findView()); CActMsg actMsg("FlashCore"); actMsg.execute("PerchCoreHolder"); } } } return true; }
bool CParrot::ParrotSpeakMsg(CParrotSpeakMsg *msg) { static const char *const ROOM_NAMES[] = { "SGTState", "SGTLittleLift", "SecClassLittleLift", "SecClassState", "Lift", "ServiceElevator", "Dome", "Home", "MoonEmbLobby", nullptr }; if (!stateGet24() || _v4 == 3 || compareViewNameTo("Titania.Node 18.N")) return true; // Check for rooms not to speak in for (const char *const *s = &ROOM_NAMES[0]; *s; ++s) { if (isEquals(*s)) return true; } // Don't have the parrot speak too often if ((getTicksCount() - _field120) < 20000 || _speechCounter) return true; playSound("z#475.wav", 50); if (msg->_target == "Bomb") { startTalking("PerchedParrot", 280236); } else if (msg->_target == "Announcements") { startTalking("PerchedParrot", 280263); } else if (msg->_target == "Television") { startTalking("PerchedParrot", 280264); } else if (msg->_target == "Barbot") { if (msg->_action == "AskForDrink") startTalking("PerchedParrot", 280262); } else if (msg->_target == "SuccUBus") { if (msg->_action == "TurnOn") startTalking("PerchedParrot", 80161); else if (msg->_action == "EnterView") startTalking("PerchedParrot", 80159); } else if (msg->_target == "Cellpoints") { if (getRandomNumber(2) == 0) { switch (getRandomNumber(2)) { case 0: startTalking("PerchedParrot", 80193); break; case 1: startTalking("PerchedParrot", 80197); break; case 2: startTalking("PerchedParrot", 80198); break; default: break; } } else if (msg->_action == "DoorBot") { startTalking("PerchedParrot", 80195); } else if (msg->_action == "DeskBot") { startTalking("PerchedParrot", 80194); } else if (msg->_action == "BarBot") { startTalking("PerchedParrot", 80191); } else if (msg->_action == "BellBot") { startTalking("PerchedParrot", 80192); } else if (msg->_action == "LiftBot") { startTalking("PerchedParrot", 80196); } } _field120 = getTicksCount(); return true; }