bool CBellBot::MovieEndMsg(CMovieEndMsg *msg) { if (!(_npcFlags & NPCFLAG_10000)) { CTrueTalkNPC::MovieEndMsg(msg); } else if (clipExistsByEnd("Walk On", msg->_endFrame)) { setPosition(Point(80, 10)); loadFrame(543); _npcFlags |= NPCFLAG_START_IDLING; if (_npcFlags & NPCFLAG_40000) { startTalking(this, 157); _npcFlags &= ~NPCFLAG_40000; } setTalking(this, true); petSetArea(PET_CONVERSATION); } else if (clipExistsByEnd("Walk Off", msg->_endFrame)) { CPutBotBackInHisBoxMsg boxMsg; boxMsg.execute(this); if (_npcFlags & NPCFLAG_20000) startAnimTimer("SummonDoorbot", 1500); } else { CTrueTalkNPC::MovieEndMsg(msg); } return true; }
bool CCage::MovieEndMsg(CMovieEndMsg *msg) { enableMouse(); _open = clipExistsByEnd("Shut", msg->_endFrame); CStatusChangeMsg statusMsg; statusMsg._newStatus = _open ? 1 : (CParrot::_v4 == 0 ? 1 : 0); statusMsg.execute("PerchCoreHolder"); return true; }
bool CParrot::MovieEndMsg(CMovieEndMsg *msg) { if ((_npcFlags & NPCFLAG_2000000) && clipExistsByEnd("Take Off", msg->_endFrame)) { setVisible(false); moveUnder(findRoom()); stopMovie(); CActMsg actMsg1("LoseParrot"); actMsg1.execute("ParrotLobbyController"); if (_field134) { CActMsg actMsg2("PanAwayFromParrot"); actMsg2.execute(_field134); _field134 = nullptr; } else { CActMsg actMsg2("Shut"); actMsg2.execute("ParrotCage"); } _npcFlags &= ~NPCFLAG_2000000; _v4 = 2; } else if (_npcFlags & NPCFLAG_10000) { if (_npcFlags & NPCFLAG_20000) { _npcFlags = (_npcFlags & ~NPCFLAG_20000) | NPCFLAG_40000; if (_npcFlags & NPCFLAG_100000) { playClip("Walk Left Loop", MOVIE_NOTIFY_OBJECT); movieEvent(236); } else { playClip("Walk Right Loop", MOVIE_NOTIFY_OBJECT); } } else if (_npcFlags & NPCFLAG_40000) { int xp = _bounds.left + _bounds.width() / 2; if (_npcFlags & NPCFLAG_100000) { if ((xp - _field128) > 32) { setPosition(Point(_bounds.left - 40, _bounds.top)); playClip("Walk Left Loop", MOVIE_NOTIFY_OBJECT); movieEvent(236); } else { setPosition(Point(_bounds.left - 10, _bounds.top)); playClip("Walk Left Outro", MOVIE_NOTIFY_OBJECT); _npcFlags = (_npcFlags & ~NPCFLAG_40000) | NPCFLAG_80000; } } else { if ((_field128 - xp) > 32) { playClip("Walk Right Loop", MOVIE_NOTIFY_OBJECT); movieEvent(244); } else { playClip("Walk Right Outro", MOVIE_NOTIFY_OBJECT); _npcFlags = (_npcFlags & NPCFLAG_40000) | NPCFLAG_80000; } } } else if (_npcFlags & NPCFLAG_80000) { loadFrame(0); if (_npcFlags & NPCFLAG_100000) setPosition(Point(_bounds.left - 30, _bounds.top)); else setPosition(Point(_bounds.left + 14, _bounds.top)); _npcFlags &= ~(NPCFLAG_10000 | NPCFLAG_80000 | NPCFLAG_100000 | NPCFLAG_200000); CTrueTalkNPC::MovieEndMsg(msg); } else { if (_npcFlags & NPCFLAG_1000000) { Point pt = getMousePos(); if (pt.x > 70 || pt.y < 90 || pt.y > 280) { stopMovie(); loadFrame(0); _npcFlags &= ~NPCFLAG_1000000; } if (clipExistsByEnd("Walk Left Loop", msg->_endFrame)) { playClip("Lean Over To Chicken", MOVIE_NOTIFY_OBJECT); setPosition(Point(_bounds.left - 55, _bounds.top)); _field130 = (-100 - _bounds.left) / 5; movieEvent(261); movieEvent(262); movieEvent(265); movieEvent(268); movieEvent(271); return true; } else if (clipExistsByEnd("Lean Over To Chicken", msg->_endFrame)) { playClip("Eat Chicken", 0); playClip("Eat Chicken 2", MOVIE_NOTIFY_OBJECT); _v1 = 1; CStatusChangeMsg statusMsg; statusMsg._newStatus = 0; statusMsg.execute("PerchCoreHolder"); CTrueTalkTriggerActionMsg actionMsg; actionMsg._param1 = 280266; actionMsg._param2 = 1; actionMsg.execute(this); CCarry *chicken = dynamic_cast<CCarry *>(findUnder(getRoot(), "Chicken")); if (chicken) { CActMsg actMsg("Eaten"); actMsg.execute(chicken); } _npcFlags &= ~NPCFLAG_1000000; return true; } } if (clipExistsByEnd("Eat Chicken 2", msg->_endFrame)) { CStatusChangeMsg statusMsg; statusMsg._newStatus = 1; statusMsg.execute("PerchCoreHolder"); if (_v2) { loadMovie("z168.avi", false); playClip("Take Off", MOVIE_NOTIFY_OBJECT); setPosition(Point(20, 10)); _npcFlags |= NPCFLAG_2000000; } else { _npcFlags &= ~(NPCFLAG_10000 | NPCFLAG_20000 | NPCFLAG_40000 | NPCFLAG_80000 | NPCFLAG_100000 | NPCFLAG_200000); _npcFlags |= NPCFLAG_400000; stopMovie(); loadFrame(0); setPosition(Point(-90, _bounds.top)); } } else { CTrueTalkNPC::MovieEndMsg(msg); } } } return true; }
bool CDoorbot::MovieEndMsg(CMovieEndMsg *msg) { debugC(ERROR_DETAILED, kDebugScripts, "CDoorbot MovieEndMsg flags=%x v=%d, start=%d, end=%d", _npcFlags, _introMovieNum, msg->_startFrame, msg->_endFrame); if (_npcFlags & NPCFLAG_DOORBOT_INTRO) { switch (_introMovieNum) { case 3: startTalking(this, 221482); _introMovieNum = 4; break; case 6: if (clipExistsByEnd("Cloak On", msg->_endFrame)) { petShow(); setState1C(true); changeView("ServiceElevator.Node 1.S"); changeView("ServiceElevator.Node 1.N"); } break; case 7: startTalking(this, 221467); _introMovieNum = 8; break; case 9: startTalking(this, 221468); break; case 11: changeView("ServiceElevator.Node 1.S"); changeView("MoonEmbLobby.Node 1.NE"); break; default: break; } CTrueTalkNPC::MovieEndMsg(msg); } else if (_npcFlags & NPCFLAG_100000) { if (clipExistsByEnd("Cloak Off", msg->_endFrame)) { _npcFlags = (_npcFlags & ~NPCFLAG_8) | NPCFLAG_START_IDLING; setTalking(this, false); startTalking(this, 221474); _npcFlags |= NPCFLAG_DOORBOT_INTRO; _introMovieNum = 0; } else if (clipExistsByEnd("Cloak On", msg->_endFrame)) { petShow(); setState1C(true); changeView("ServiceElevator.Node 1.S"); } else { CTrueTalkNPC::MovieEndMsg(msg); } } else if (_npcFlags & NPCFLAG_400000) { if (clipExistsByEnd("Whizz On Left", msg->_endFrame) || clipExistsByEnd("Whizz On Right", msg->_endFrame)) { setPosition(Point((600 - _bounds.width()) / 2 + 18, 42)); loadFrame(0); setTalking(this, true); _npcFlags |= NPCFLAG_START_IDLING; petSetArea(PET_CONVERSATION); } else if (clipExistsByEnd("Whizz Off Left", msg->_endFrame) || clipExistsByEnd("Whizz Off Right", msg->_endFrame)) { CPutBotBackInHisBoxMsg boxMsg; boxMsg.execute(this); if (_npcFlags & NPCFLAG_4000000) startAnimTimer("SummonBellbot", 1500); } else { CTrueTalkNPC::MovieEndMsg(msg); } } else { CTrueTalkNPC::MovieEndMsg(msg); } return true; }