void sceneHandler37_setRingsState() { if (g_vars->scene37_lastDudeX == -1) { g_vars->scene37_lastDudeX = g_vars->scene37_dudeX; } else { for (uint i = 0; i < g_vars->scene37_rings.size(); i++) { int x = g_vars->scene37_rings[i]->x; if (g_vars->scene37_lastDudeX > x && g_vars->scene37_dudeX <= x && !g_vars->scene37_rings[i]->state) sceneHandler37_updateRing(i); x = g_vars->scene37_rings[i]->y; if (g_vars->scene37_lastDudeX < x && g_vars->scene37_dudeX >= x) { if (g_vars->scene37_rings[i]->state) sceneHandler37_updateRing(i); } } g_vars->scene37_lastDudeX = g_vars->scene37_dudeX; } }
int sceneHandler37(ExCommand *cmd) { if (cmd->_messageKind != 17) return 0; switch(cmd->_messageNum) { case MSG_SC37_EXITLEFT: sceneHandler37_updateRing(0); sceneHandler37_updateRing(1); sceneHandler37_updateRing(2); break; case 29: { StaticANIObject *ani = g_fp->_currentScene->getStaticANIObjectAtPos(cmd->_sceneClickX, cmd->_sceneClickY); if (!ani || !canInteractAny(g_fp->_aniMan, ani, cmd->_keyCode)) { int picId = g_fp->_currentScene->getPictureObjectIdAtPos(cmd->_sceneClickX, cmd->_sceneClickY); PictureObject *pic = g_fp->_currentScene->getPictureObjectById(picId, 0); if (!pic || !canInteractAny(g_fp->_aniMan, pic, cmd->_keyCode)) { if ((g_fp->_sceneRect.right - cmd->_sceneClickX < 47 && g_fp->_sceneRect.right < g_fp->_sceneWidth - 1) || (cmd->_sceneClickX - g_fp->_sceneRect.left < 47 && g_fp->_sceneRect.left > 0)) { g_fp->processArcade(cmd); break; } } } } break; case 33: if (g_fp->_aniMan2) { int x = g_fp->_aniMan2->_ox; g_vars->scene37_dudeX = x; if (x >= 500) { if (x < g_fp->_sceneRect.left + 200) g_fp->_currentScene->_x = x - 300 - g_fp->_sceneRect.left; } else { g_fp->_currentScene->_x = -g_fp->_sceneRect.left; } x = g_vars->scene37_dudeX; if (x > g_fp->_sceneRect.right - 200) g_fp->_currentScene->_x = x + 300 - g_fp->_sceneRect.right; } sceneHandler37_setRingsState(); g_fp->_behaviorManager->updateBehaviors(); g_fp->startSceneTrack(); ++g_vars->scene37_soundFlipper; break; case MSG_SC37_PULL: if (g_vars->scene37_rings[0]->ani->_movement && g_vars->scene37_rings[0]->ani->_movement->_id == MV_GRD37_PULL) { if ((g_fp->getObjectState(sO_Guard_1) == g_fp->getObjectEnumState(sO_Guard_1, sO_On) && !g_vars->scene37_rings[0]->state) || (g_fp->getObjectState(sO_Guard_1) == g_fp->getObjectEnumState(sO_Guard_1, sO_Off) && g_vars->scene37_rings[0]->state)) { g_vars->scene37_plusMinus1->_statics = g_vars->scene37_plusMinus1->getStaticsById(ST_PMS_PLUS); } else { g_vars->scene37_plusMinus1->_statics = g_vars->scene37_plusMinus1->getStaticsById(ST_PMS_MINUS); } } else if (g_vars->scene37_rings[1]->ani->_movement && g_vars->scene37_rings[1]->ani->_movement->_id == MV_GRD37_PULL) { if ((g_fp->getObjectState(sO_Guard_2) == g_fp->getObjectEnumState(sO_Guard_2, sO_On) && !g_vars->scene37_rings[1]->state) || (g_fp->getObjectState(sO_Guard_2) == g_fp->getObjectEnumState(sO_Guard_2, sO_Off) && g_vars->scene37_rings[1]->state)) { g_vars->scene37_plusMinus2->_statics = g_vars->scene37_plusMinus2->getStaticsById(ST_PMS_PLUS); } else { g_vars->scene37_plusMinus2->_statics = g_vars->scene37_plusMinus2->getStaticsById(ST_PMS_MINUS); } } else if (g_vars->scene37_rings[2]->ani->_movement && g_vars->scene37_rings[2]->ani->_movement->_id == MV_GRD37_PULL) { if ((g_fp->getObjectState(sO_Guard_3) == g_fp->getObjectEnumState(sO_Guard_3, sO_On) && !g_vars->scene37_rings[2]->state) || (g_fp->getObjectState(sO_Guard_3) == g_fp->getObjectEnumState(sO_Guard_3, sO_Off) && g_vars->scene37_rings[2]->state)) { g_vars->scene37_plusMinus3->_statics = g_vars->scene37_plusMinus3->getStaticsById(ST_PMS_PLUS); } else { g_vars->scene37_plusMinus3->_statics = g_vars->scene37_plusMinus3->getStaticsById(ST_PMS_MINUS); } } if (g_vars->scene37_soundFlipper) { g_fp->playSound(SND_37_007, 0); g_vars->scene37_soundFlipper = 0; } break; } return 0; }