mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-20 08:48:13 +00:00
280 lines
8.1 KiB
C++
280 lines
8.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 "tsage/blue_force/blueforce_scenes7.h"
|
|
#include "tsage/globals.h"
|
|
#include "tsage/scenes.h"
|
|
#include "tsage/tsage.h"
|
|
#include "tsage/staticres.h"
|
|
|
|
namespace TsAGE {
|
|
|
|
namespace BlueForce {
|
|
|
|
/*--------------------------------------------------------------------------
|
|
* Scene 710 - Beach
|
|
*
|
|
*--------------------------------------------------------------------------*/
|
|
|
|
void Scene710::Timer1::signal() {
|
|
PaletteRotation *rotation = BF_GLOBALS._scenePalette.addRotation(136, 138, -1);
|
|
rotation->setDelay(20);
|
|
rotation = BF_GLOBALS._scenePalette.addRotation(146, 148, -1);
|
|
rotation->setDelay(30);
|
|
rotation = BF_GLOBALS._scenePalette.addRotation(187, 191, -1);
|
|
rotation->setDelay(35);
|
|
rotation = BF_GLOBALS._scenePalette.addRotation(245, 246, -1);
|
|
rotation->setDelay(20);
|
|
remove();
|
|
}
|
|
|
|
void Scene710::Action1::signal() {
|
|
Scene710 *scene = (Scene710 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (_actionIndex++) {
|
|
case 0:
|
|
BF_GLOBALS._player.disableControl();
|
|
_state = 7104;
|
|
if (BF_INVENTORY.getObjectScene(INV_CRATE1) == 1)
|
|
_state = 7105;
|
|
setDelay(3);
|
|
break;
|
|
case 1: {
|
|
ADD_MOVER(BF_GLOBALS._player, scene->_laura._position.x + 8, scene->_laura._position.y + 8);
|
|
break;
|
|
}
|
|
case 2:
|
|
BF_GLOBALS._player._strip = 2;
|
|
scene->_stripManager.start(_state, this);
|
|
break;
|
|
case 3:
|
|
if (_state != 7105)
|
|
BF_GLOBALS._player.enableControl();
|
|
else {
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->_sceneMode = 7106;
|
|
scene->setAction(&scene->_sequenceManager1, scene, 7106, &BF_GLOBALS._player, &scene->_laura, &scene->_kid, &scene->_dog, NULL);
|
|
}
|
|
if (_state < 7104) {
|
|
_state++;
|
|
if ((_state == 7104) && (BF_INVENTORY.getObjectScene(INV_CRATE1) == 1))
|
|
_state = 7105;
|
|
}
|
|
remove();
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
// Laura
|
|
bool Scene710::Object3::startAction(CursorType action, Event &event) {
|
|
Scene710 *scene = (Scene710 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
if (action == CURSOR_TALK) {
|
|
BF_GLOBALS._player.setAction(&scene->_action1);
|
|
return true;
|
|
} else
|
|
return NamedObject::startAction(action, event);
|
|
}
|
|
|
|
bool Scene710::Object4::startAction(CursorType action, Event &event) {
|
|
Scene710 *scene = (Scene710 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
if ((action == CURSOR_LOOK) && (scene->_kid._position.x < 0)) {
|
|
SceneItem::display2(710, 13);
|
|
return true;
|
|
} else
|
|
return NamedObject::startAction(action, event);
|
|
}
|
|
|
|
//Stick
|
|
bool Scene710::Object5::startAction(CursorType action, Event &event) {
|
|
Scene710 *scene = (Scene710 *)BF_GLOBALS._sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_LOOK:
|
|
if (scene->_stickThrowCount <= 2)
|
|
return NamedObject::startAction(action, event);
|
|
else {
|
|
SceneItem::display2(710, 3);
|
|
scene->_watchCrate = true;
|
|
return true;
|
|
}
|
|
case CURSOR_USE:
|
|
if ((scene->_kid._position.x < 0) && (scene->_dogLying)) {
|
|
scene->_stickThrowCount++;
|
|
if (!scene->_watchCrate) {
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->_dogLying = false;
|
|
scene->_sceneMode = 7105;
|
|
scene->setAction(&scene->_sequenceManager1, scene, 7105, &BF_GLOBALS._player, &scene->_stick, &scene->_dog, NULL);
|
|
} else {
|
|
BF_GLOBALS._player.disableControl();
|
|
scene->_sceneMode = 7101;
|
|
scene->setAction(&scene->_sequenceManager1, scene, 7101, &BF_GLOBALS._player, &scene->_dog, &scene->_stick, NULL);
|
|
}
|
|
return true;
|
|
}
|
|
// No break on purpose
|
|
default:
|
|
return NamedObject::startAction(action, event);
|
|
}
|
|
}
|
|
|
|
void Scene710::postInit(SceneObjectList *OwnerList) {
|
|
SceneExt::postInit();
|
|
loadScene(710);
|
|
_sceneBounds.moveTo(320, 0);
|
|
|
|
BF_GLOBALS._sound1.fadeSound(14);
|
|
_soundExt1.fadeSound(48);
|
|
|
|
BF_GLOBALS._player.postInit();
|
|
BF_GLOBALS._player.hide();
|
|
BF_GLOBALS._player._moveDiff = Common::Point(4, 2);
|
|
BF_GLOBALS._player.disableControl();
|
|
if (BF_GLOBALS._dayNumber == 0)
|
|
BF_GLOBALS._dayNumber = 1;
|
|
_stripManager.addSpeaker(&_jakeSpeaker);
|
|
_stripManager.addSpeaker(&_skipSpeaker);
|
|
_stripManager.addSpeaker(&_lauraSpeaker);
|
|
_stripManager.addSpeaker(&_gameTextSpeaker);
|
|
|
|
_kid.postInit();
|
|
_kid._moveDiff = Common::Point(4, 2);
|
|
_laura.postInit();
|
|
_laura._moveDiff = Common::Point(4, 2);
|
|
_dog.postInit();
|
|
_dog._moveDiff = Common::Point(4, 2);
|
|
_stick.postInit();
|
|
_stick.setVisage(710);
|
|
_stick.setStrip(2);
|
|
_stick.animate(ANIM_MODE_2, NULL);
|
|
_stick.setPosition(Common::Point(650, 160));
|
|
_stick._moveDiff.x = 16;
|
|
_stick.setDetails(710, 4, -1, -1, 1, (SceneItem *)NULL);
|
|
_laura.setDetails(710, 2, -1, -1, 1, (SceneItem *)NULL);
|
|
_kid.setDetails(710, 6, -1, -1, 1, (SceneItem *)NULL);
|
|
_dog.setDetails(710, 0, -1, -1, 1, (SceneItem *)NULL);
|
|
|
|
_item1.setDetails(Rect(555, 68, 583, 101), 710, 7, 23, -1, 1, NULL);
|
|
_item2.setDetails(Rect(583, 46, 611, 78), 710, 7, 23, -1, 1, NULL);
|
|
_item3.setDetails(Rect(611, 24, 639, 56), 710, 7, 23, -1, 1, NULL);
|
|
_item6.setDetails(1, 710, 9, 1, -1, 1);
|
|
_item4.setDetails(2, 710, 8, 14, -1, 1);
|
|
_item5.setDetails(3, 710, 10, 16, -1, 1);
|
|
_item8.setDetails(Rect(222, 18, 249, 42), 710, 12, 18, -1, 1, NULL);
|
|
_item7.setDetails(Rect(0, 0, 640, 52), 710, 11, 17, -1, 1, NULL);
|
|
_item9.setDetails(Rect(0, 0, 640, 128), 710, 5, 15, -1, 1, NULL);
|
|
|
|
_stickThrowCount = 0;
|
|
_dogLying = _watchCrate = _throwStick = false;
|
|
_action1._state = 7100;
|
|
_timer1.set(2, NULL);
|
|
_sceneMode = 7100;
|
|
setAction(&_sequenceManager1, this, 7100, &BF_GLOBALS._player, &_laura, &_kid, &_dog, NULL);
|
|
}
|
|
|
|
void Scene710::signal() {
|
|
switch (_sceneMode) {
|
|
case 0:
|
|
BF_GLOBALS._player.enableControl();
|
|
break;
|
|
case 7100:
|
|
BF_GLOBALS._player.enableControl();
|
|
_sceneMode = 7102;
|
|
setAction(&_sequenceManager1, this, 7102, &_dog, NULL);
|
|
break;
|
|
case 7101:
|
|
// Pick up crate part
|
|
BF_GLOBALS._player.enableControl();
|
|
BF_INVENTORY.setObjectScene(INV_CRATE1, 1);
|
|
_stick.remove();
|
|
BF_GLOBALS._walkRegions.enableRegion(2);
|
|
break;
|
|
case 7102:
|
|
_stick.setPosition(Common::Point(100, 122));
|
|
_stick.animate(ANIM_MODE_NONE, NULL);
|
|
_stick._strip = 2;
|
|
if (_stickThrowCount <= 2)
|
|
_stick._frame = 2;
|
|
else {
|
|
if (_stickThrowCount == 3) {
|
|
BF_GLOBALS._player.disableControl();
|
|
_sceneMode = 0;
|
|
_stripManager.start(7108, this);
|
|
}
|
|
_stick._frame = 1;
|
|
}
|
|
_dogLying = true;
|
|
BF_GLOBALS._walkRegions.disableRegion(2);
|
|
if ((_throwStick) && (_sceneMode != 0))
|
|
BF_GLOBALS._player.enableControl();
|
|
break;
|
|
case 7103:
|
|
if (BF_GLOBALS._player._position.x > 179) {
|
|
_sceneMode = 7102;
|
|
setAction(&_sequenceManager1, this, 7102, &_dog, NULL);
|
|
} else {
|
|
_sceneMode = 7104;
|
|
setAction(&_sequenceManager3, this, 7104, &_kid, NULL);
|
|
}
|
|
break;
|
|
case 7105:
|
|
_throwStick = true;
|
|
// No break on purpose
|
|
case 7104:
|
|
_sceneMode = 7102;
|
|
setAction(&_sequenceManager1, this, 7102, &_dog, NULL);
|
|
BF_GLOBALS._walkRegions.enableRegion(2);
|
|
break;
|
|
case 7106:
|
|
BF_GLOBALS._sound1.fadeOut2(NULL);
|
|
BF_GLOBALS._sceneManager.changeScene(270);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene710::dispatch() {
|
|
if ((_kid._position.x > 0) && (_dogLying) && (_sceneMode != 7106)) {
|
|
_dogLying = false;
|
|
_sceneMode = 7103;
|
|
setAction(&_sequenceManager1, this, 7103, &_kid, &_stick, &_dog, NULL);
|
|
}
|
|
SceneExt::dispatch();
|
|
}
|
|
|
|
void Scene710::synchronize(Serializer &s) {
|
|
SceneExt::synchronize(s);
|
|
s.syncAsSint16LE(_dogLying);
|
|
s.syncAsSint16LE(_stickThrowCount);
|
|
s.syncAsSint16LE(_watchCrate);
|
|
s.syncAsSint16LE(_throwStick);
|
|
}
|
|
|
|
|
|
} // End of namespace BlueForce
|
|
} // End of namespace TsAGE
|