bool CNoseHolder::FrameMsg(CFrameMsg *msg) { if (!_dragObject) { CGameObject *dragObj = getDraggingObject(); if (!dragObj) return false; if (!dragObj->isEquals("Feathers") || getView() != findView()) return false; _dragObject = dragObj; } if (_dragObject) { if (!checkPoint(Point(_dragObject->_bounds.left, _dragObject->_bounds.top))) { _field11C = false; } else if (!_field11C) { CActMsg actMsg("Sneeze"); actMsg.execute(this); _field11C = true; } } return true; }
bool CLemonDispensor::FrameMsg(CFrameMsg *msg) { if (_v2 || !_isSummer) return true; if (!_draggingObject) { CGameObject *obj = getDraggingObject(); if (obj && getView() == findView()) { if (obj->isEquals("Perch")) { petDisplayMessage(1, TOO_SHORT_TO_REACH_BRANCHES); return true; } if (obj->isEquals("LongStick")) _draggingObject = obj; } } if (_draggingObject) { Point pt(_origPt.x + _draggingObject->_bounds.left, _origPt.y + _draggingObject->_bounds.top); bool flag = checkPoint(pt, true); if (_fieldEC == 0) { if (flag && ++_v3 > 10) { CLemonFallsFromTreeMsg lemonMsg(pt); lemonMsg.execute("Lemon"); _v2 = 1; } } else if (_fieldEC == 1 && !flag) { _fieldEC = 0; } } return true; }
bool CSpeechDispensor::FrameMsg(CFrameMsg *msg) { if (_fieldEC || _seasonNum == SEASON_SUMMER || _seasonNum == SEASON_SPRING) return true; CGameObject *dragObject = getDraggingObject(); if (!_dragItem && dragObject && getView() == findView()) { if (dragObject->isEquals("Perch")) { petDisplayMessage(1, TOO_SHORT_TO_REACH_BRANCHES); return true; } if (dragObject->isEquals("LongStick")) _dragItem = dragObject; } if (_dragItem) { Point pt(_itemPos.x + _dragItem->_bounds.left, _itemPos.y + _dragItem->_bounds.top); if (!checkPoint(pt, true)) return true; switch (_state) { case 0: playSound("z#93.wav"); if (_seasonNum == SEASON_WINTER) { petDisplayMessage(1, FROZEN_TO_BRANCH); _fieldE0 = false; _state = 1; } else { if (++_fieldE0 >= 5) { CActMsg actMsg("PlayerGetsSpeechCentre"); actMsg.execute("SeasonalAdjust"); CSpeechFallsFromTreeMsg fallMsg(pt); fallMsg.execute("SpeechCentre"); _fieldEC = true; _fieldE0 = false; } _state = 1; } break; case 2: _state = 0; ++_fieldE0; break; default: break; } } return true; }
bool CHammerDispensorButton::FrameMsg(CFrameMsg *msg) { if (!_fieldF8) return true; if (!_field10C) { CGameObject *obj = getDraggingObject(); if (obj) { if (obj->isEquals("Perch") && getView() == findView()) _field10C = obj; } } if (_field10C) { Point pt(_btnPos.x + _bounds.left, _btnPos.y + _bounds.top); bool flag = checkPoint(pt, true); switch (_fieldFC) { case 0: if (flag) { playSound("z#93.wav"); if (++_field100 == 5) { if (!_field110) { CActMsg actMsg(_msgAction); actMsg.execute(_msgTarget); } setVisible(false); _fieldF8 = 0; _field100 = 0; } _fieldFC = 1; } break; case 1: if (!flag) { _fieldFC = 0; ++_field100; } break; default: break; } } return true; }
bool CHammerDispensorButton::FrameMsg(CFrameMsg *msg) { if (!_active) return true; if (!_perch) { CGameObject *obj = getDraggingObject(); if (obj) { if (obj->isEquals("Perch") && getView() == findView()) _perch = static_cast<CPerch *>(obj); } } if (_perch) { Point pt(_btnPos.x + _perch->_bounds.left, _btnPos.y + _perch->_bounds.top); bool flag = checkPoint(pt, true); if (!_open) { if (flag) { playSound("z#93.wav"); if (++_hitCounter == 5) { if (!_hammerTaken) { CActMsg actMsg(_msgAction); actMsg.execute(_msgTarget); } setVisible(false); _active = false; _hitCounter = 0; } _open = true; } } else { if (!flag) { _open = false; ++_hitCounter; } } } 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; }