scummvm/engines/fullpipe/scenes/scene07.cpp
2016-07-22 22:33:34 +03:00

176 lines
5.1 KiB
C++

/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*/
#include "fullpipe/fullpipe.h"
#include "fullpipe/objects.h"
#include "fullpipe/objectnames.h"
#include "fullpipe/constants.h"
#include "fullpipe/motion.h"
#include "fullpipe/scenes.h"
#include "fullpipe/scene.h"
#include "fullpipe/statics.h"
#include "fullpipe/messages.h"
#include "fullpipe/behavior.h"
namespace Fullpipe {
void scene07_initScene(Scene *sc) {
g_vars->scene07_lukeAnim = 0;
g_vars->scene07_lukePercent = 0;
g_vars->scene07_plusMinus = sc->getStaticANIObject1ById(ANI_PLUSMINUS, -1);
if (g_fp->getObjectState(sO_Guard_1) == g_fp->getObjectEnumState(sO_Guard_1, sO_Off))
g_vars->scene07_plusMinus->_statics = g_vars->scene07_plusMinus->getStaticsById(ST_PMS_MINUS);
else
g_vars->scene07_plusMinus->_statics = g_vars->scene07_plusMinus->getStaticsById(ST_PMS_PLUS);
if (g_fp->getObjectState(sO_HareTheNooksiter) == g_fp->getObjectEnumState(sO_HareTheNooksiter, sO_WithoutHandle)) {
Scene *oldsc = g_fp->_currentScene;
g_fp->_currentScene = sc;
sc->getStaticANIObject1ById(ANI_CORNERSITTER, -1)->changeStatics2(ST_CST_HANDLELESS);
g_fp->_currentScene = oldsc;
}
}
void sceneHandler07_openLuke() {
StaticANIObject *luke = g_fp->_currentScene->getStaticANIObject1ById(ANI_LUKE, -1);
luke->changeStatics2(ST_LUK_OPEN);
luke->show1(-1, -1, -1, 0);
if (g_vars->scene07_lukeAnim) {
g_vars->scene07_lukeAnim->_percent = g_vars->scene07_lukePercent;
} else {
StaticANIObject *ani = g_fp->_currentScene->getStaticANIObject1ById(ANI_CORNERSITTER, -1);
g_vars->scene07_lukeAnim = g_fp->_behaviorManager->getBehaviorMoveByMessageQueueDataId(ani, ST_CST_HANDLELESS, QU_CST_CLOSELUKE);
g_vars->scene07_lukeAnim->_percent = g_vars->scene07_lukePercent;
}
}
void sceneHandler07_closeLuke() {
g_fp->_currentScene->getStaticANIObject1ById(ANI_LUKE, -1)->changeStatics2(ST_LUK_CLOSED);
if (!g_vars->scene07_lukeAnim) {
StaticANIObject *ani = g_fp->_currentScene->getStaticANIObject1ById(ANI_CORNERSITTER, -1);
g_vars->scene07_lukeAnim = g_fp->_behaviorManager->getBehaviorMoveByMessageQueueDataId(ani, ST_CST_HANDLELESS, QU_CST_CLOSELUKE);
}
g_vars->scene07_lukePercent = g_vars->scene07_lukeAnim->_percent;
g_vars->scene07_lukeAnim->_percent = 0;
StaticANIObject *ani = g_fp->_currentScene->getStaticANIObject1ById(ANI_HOOLIGAN, -1);
ani->changeStatics2(ST_HGN_LUKE);
ani->show1(-1, -1, -1, 0);
}
void sceneHandler07_hideLuke() {
g_fp->_currentScene->getStaticANIObject1ById(ANI_LUKE, -1)->hide();
Movement *mov = g_fp->_currentScene->getStaticANIObject1ById(ANI_CORNERSITTER, -1)->_movement;
if (mov) {
if (mov->_id == MV_CST_CLOSELUKE) {
StaticANIObject *ani = g_fp->_currentScene->getStaticANIObject1ById(ANI_HOOLIGAN, -1);
ani->changeStatics2(ST_HGN_LOOK);
ani->_flags &= 0xFFFB;
}
}
}
void sceneHandler07_showBox() {
StaticANIObject *box = g_fp->_currentScene->getStaticANIObject1ById(ANI_SC7_BOX, -1);
box->show1(492, 474, MV_SC7_BOX_default, 0);
box->_priority = 25;
}
void sceneHandler07_hideBox() {
g_fp->_currentScene->getStaticANIObject1ById(ANI_SC7_BOX, -1)->hide();
}
int sceneHandler07(ExCommand *ex) {
if (ex->_messageKind != 17)
return 0;
switch(ex->_messageNum) {
case MSG_SC7_OPENLUKE:
sceneHandler07_openLuke();
break;
case MSG_SC7_PULL:
if (g_vars->scene07_plusMinus->_statics->_staticsId == ST_PMS_MINUS)
g_vars->scene07_plusMinus->_statics = g_vars->scene07_plusMinus->getStaticsById(ST_PMS_PLUS);
else
g_vars->scene07_plusMinus->_statics = g_vars->scene07_plusMinus->getStaticsById(ST_PMS_MINUS);
break;
case MSG_SC7_CLOSELUKE:
sceneHandler07_closeLuke();
break;
case MSG_SC7_HIDELUKE:
sceneHandler07_hideLuke();
break;
case MSG_SC7_SHOWBOX:
sceneHandler07_showBox();
break;
case MSG_SC7_HIDEBOX:
sceneHandler07_hideBox();
break;
case 33:
{
int res = 0;
if (g_fp->_aniMan2) {
if (g_fp->_aniMan2->_ox < g_fp->_sceneRect.left + 200)
g_fp->_currentScene->_x = g_fp->_aniMan2->_ox - g_fp->_sceneRect.left - 300;
if (g_fp->_aniMan2->_ox > g_fp->_sceneRect.right - 200)
g_fp->_currentScene->_x = g_fp->_aniMan2->_ox - g_fp->_sceneRect.right + 300;
res = 1;
}
g_fp->_behaviorManager->updateBehaviors();
return res;
}
}
return 0;
}
} // End of namespace Fullpipe