mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-16 14:50:17 +00:00
TSAGE: Implemented Blue Force scene 840 - Boat Rentals
This commit is contained in:
parent
cdf1335ea6
commit
e506df40ce
@ -140,6 +140,8 @@ Scene *BlueForceGame::createScene(int sceneNumber) {
|
||||
// Outside Boat Rentals
|
||||
return new Scene830();
|
||||
case 840:
|
||||
// Boat Rentals
|
||||
return new Scene840();
|
||||
case 850:
|
||||
case 860:
|
||||
case 870:
|
||||
@ -430,6 +432,12 @@ void NamedObject::setDetails(int resNum, int lookLineNum, int talkLineNum, int u
|
||||
}
|
||||
}
|
||||
|
||||
void NamedObject::setDetails(int resNum, int lookLineNum, int talkLineNum, int useLineNum) {
|
||||
_resNum = resNum;
|
||||
_lookLineNum = lookLineNum;
|
||||
_talkLineNum = talkLineNum;
|
||||
_useLineNum = useLineNum;
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
@ -514,6 +522,62 @@ void FollowerObject::setup(SceneObject *object, int visage, int frameNum, int yD
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
FocusObject::FocusObject(): NamedObject() {
|
||||
_img = surfaceFromRes(1, 5, 7);
|
||||
}
|
||||
|
||||
void FocusObject::postInit(SceneObjectList *OwnerList) {
|
||||
NamedObject::postInit(OwnerList);
|
||||
_resNum = 560;
|
||||
_lookLineNum = 43;
|
||||
_talkLineNum = 44;
|
||||
_useLineNum = -1;
|
||||
_v90 = 0;
|
||||
_v92 = 1;
|
||||
|
||||
SceneExt *scene = (SceneExt *)BF_GLOBALS._sceneManager._scene;
|
||||
scene->_eventHandler = this;
|
||||
BF_GLOBALS._sceneItems.push_front(this);
|
||||
}
|
||||
|
||||
void FocusObject::synchronize(Serializer &s) {
|
||||
NamedObject::synchronize(s);
|
||||
s.syncAsSint16LE(_v90);
|
||||
s.syncAsSint16LE(_v92);
|
||||
}
|
||||
|
||||
void FocusObject::remove() {
|
||||
BF_GLOBALS._sceneItems.remove(this);
|
||||
|
||||
SceneExt *scene = (SceneExt *)BF_GLOBALS._sceneManager._scene;
|
||||
if (scene->_eventHandler == this)
|
||||
scene->_eventHandler = NULL;
|
||||
|
||||
BF_GLOBALS._events.setCursor(BF_GLOBALS._events.getCursor());
|
||||
NamedObject::remove();
|
||||
}
|
||||
|
||||
void FocusObject::process(Event &event) {
|
||||
if (BF_GLOBALS._player._enabled) {
|
||||
if (_bounds.contains(event.mousePos)) {
|
||||
BF_GLOBALS._events.setCursor(BF_GLOBALS._events.getCursor());
|
||||
if ((event.eventType == EVENT_BUTTON_DOWN) && (BF_GLOBALS._events.getCursor() == CURSOR_WALK) &&
|
||||
(event.btnState == 3)) {
|
||||
BF_GLOBALS._events.setCursor(CURSOR_USE);
|
||||
event.handled = true;
|
||||
}
|
||||
} else if (event.mousePos.y < 168) {
|
||||
BF_GLOBALS._events.setCursor(_img);
|
||||
if (event.eventType == EVENT_BUTTON_DOWN) {
|
||||
event.handled = true;
|
||||
remove();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
SceneExt::SceneExt(): Scene() {
|
||||
_stripManager._onBegin = SceneExt::startStrip;
|
||||
_stripManager._onEnd = SceneExt::endStrip;
|
||||
|
@ -109,6 +109,7 @@ public:
|
||||
virtual bool startAction(CursorType action, Event &event);
|
||||
|
||||
void setDetails(int resNum, int lookLineNum, int talkLineNum, int useLineNum, int mode, SceneItem *item);
|
||||
void setDetails(int resNum, int lookLineNum, int talkLineNum, int useLineNum);
|
||||
};
|
||||
|
||||
class CountdownObject: public NamedObject {
|
||||
@ -127,7 +128,7 @@ public:
|
||||
SceneObject *_object;
|
||||
FollowerObject();
|
||||
|
||||
virtual Common::String getClassName() { return "SceneObjectExt4"; }
|
||||
virtual Common::String getClassName() { return "FollowerObject"; }
|
||||
virtual void synchronize(Serializer &s);
|
||||
virtual void remove();
|
||||
virtual void dispatch();
|
||||
@ -136,6 +137,18 @@ public:
|
||||
void setup(SceneObject *object, int visage, int frameNum, int yDiff);
|
||||
};
|
||||
|
||||
class FocusObject: public NamedObject {
|
||||
public:
|
||||
int _v90, _v92;
|
||||
GfxSurface _img;
|
||||
|
||||
FocusObject();
|
||||
virtual void postInit(SceneObjectList *OwnerList);
|
||||
virtual void synchronize(Serializer &s);
|
||||
virtual void remove();
|
||||
virtual void process(Event &event);
|
||||
};
|
||||
|
||||
enum ExitFrame { EXITFRAME_N = 1, EXITFRAME_NE = 2, EXITFRAME_E = 3, EXITFRAME_SE = 4,
|
||||
EXITFRAME_S = 5, EXITFRAME_SW = 6, EXITFRAME_W = 7, EXITFRAME_NW = 8 };
|
||||
|
||||
|
@ -795,6 +795,596 @@ void Scene830::dispatch() {
|
||||
}
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------
|
||||
* Scene 840 - Boat Rentals
|
||||
*
|
||||
*--------------------------------------------------------------------------*/
|
||||
|
||||
void Scene840::Object2::postInit(SceneObjectList *OwnerList) {
|
||||
FocusObject::postInit(OwnerList);
|
||||
|
||||
if (BF_INVENTORY.getObjectScene(INV_RENTAL_KEYS) != 1) {
|
||||
_rentalKeys.postInit();
|
||||
_rentalKeys.setVisage(840);
|
||||
_rentalKeys.setStrip(2);
|
||||
_rentalKeys.setFrame(3);
|
||||
_rentalKeys.setPosition(Common::Point(120, 132));
|
||||
_rentalKeys.fixPriority(255);
|
||||
_rentalKeys.setDetails(840, 52, 8, -1, 2, NULL);
|
||||
}
|
||||
|
||||
if (BF_INVENTORY.getObjectScene(INV_WAVE_KEYS) != 1) {
|
||||
_waveKeys.postInit();
|
||||
_waveKeys.setVisage(840);
|
||||
_waveKeys.setStrip(2);
|
||||
_waveKeys.setFrame(2);
|
||||
_waveKeys.setPosition(Common::Point(201, 91));
|
||||
_waveKeys.fixPriority(255);
|
||||
_waveKeys.setDetails(840, 53, 8, -1, 2, NULL);
|
||||
}
|
||||
|
||||
_v1B4 = _v1B6 = 0;
|
||||
}
|
||||
|
||||
void Scene840::Object2::remove() {
|
||||
Scene840 *scene = (Scene840 *)BF_GLOBALS._sceneManager._scene;
|
||||
|
||||
_rentalKeys.remove();
|
||||
_waveKeys.remove();
|
||||
BF_GLOBALS._player.disableControl();
|
||||
|
||||
scene->_sceneMode = 8412;
|
||||
scene->setAction(&scene->_sequenceManager1, scene, 8412, &BF_GLOBALS._player, NULL);
|
||||
}
|
||||
|
||||
void Scene840::Object2::process(Event &event) {
|
||||
if (BF_GLOBALS._player._enabled) {
|
||||
if (_bounds.contains(event.mousePos)) {
|
||||
CursorType cursorId = BF_GLOBALS._events.getCursor();
|
||||
BF_GLOBALS._events.setCursor(cursorId);
|
||||
|
||||
if ((event.eventType == EVENT_BUTTON_DOWN) && (cursorId == CURSOR_WALK) && (event.btnState == 3)) {
|
||||
BF_GLOBALS._events.setCursor(CURSOR_USE);
|
||||
event.handled = true;
|
||||
}
|
||||
} else if (event.mousePos.y < 168) {
|
||||
BF_GLOBALS._events.setCursor(_img);
|
||||
if (event.eventType == EVENT_BUTTON_DOWN) {
|
||||
event.handled = true;
|
||||
remove();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
FocusObject::process(event);
|
||||
}
|
||||
|
||||
bool Scene840::Object2::startAction(CursorType action, Event &event) {
|
||||
switch (action) {
|
||||
case CURSOR_LOOK:
|
||||
if ((event.mousePos.y > 43) && (event.mousePos.y < 92)) {
|
||||
if (event.mousePos.x < 135) {
|
||||
SceneItem::display2(840, 54);
|
||||
return true;
|
||||
} else if (event.mousePos.x < 183) {
|
||||
SceneItem::display2(840, 57);
|
||||
return true;
|
||||
}
|
||||
} else if ((event.mousePos.y > 91) && (event.mousePos.y < 132)) {
|
||||
if (event.mousePos.x > 182) {
|
||||
SceneItem::display2(840, 58);
|
||||
return true;
|
||||
} else if (event.mousePos.x > 134) {
|
||||
SceneItem::display2(840, 57);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case INV_WAVE_KEYS:
|
||||
if ((BF_GLOBALS._dayNumber != 4) || (BF_GLOBALS._bookmark != bEndDayThree))
|
||||
SceneItem::display(840, 47);
|
||||
else {
|
||||
BF_GLOBALS._uiElements.addScore(50);
|
||||
|
||||
if (BF_INVENTORY.getObjectScene(INV_RENTAL_KEYS) == 1) {
|
||||
// Replace rental keys
|
||||
_rentalKeys.postInit();
|
||||
_rentalKeys.setVisage(840);
|
||||
_rentalKeys.setStrip(2);
|
||||
_rentalKeys.setFrame(3);
|
||||
_rentalKeys.setPosition(Common::Point(120, 132));
|
||||
_rentalKeys.fixPriority(255);
|
||||
_rentalKeys.setDetails(840, 52, 8, -1, 2, NULL);
|
||||
}
|
||||
|
||||
if (BF_INVENTORY.getObjectScene(INV_WAVE_KEYS) == 1) {
|
||||
// Replace wave keys
|
||||
_waveKeys.postInit();
|
||||
_waveKeys.setVisage(840);
|
||||
_waveKeys.setStrip(2);
|
||||
_waveKeys.setFrame(2);
|
||||
_waveKeys.setPosition(Common::Point(201, 91));
|
||||
_waveKeys.fixPriority(255);
|
||||
_waveKeys.setDetails(840, 53, 8, -1, 2, NULL);
|
||||
}
|
||||
|
||||
BF_INVENTORY.setObjectScene(INV_WAVE_KEYS, 0);
|
||||
BF_INVENTORY.setObjectScene(INV_RENTAL_KEYS, 0);
|
||||
}
|
||||
return true;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return FocusObject::startAction(action, event);
|
||||
}
|
||||
|
||||
bool Scene840::Object2::RentalKeys::startAction(CursorType action, Event &event) {
|
||||
Scene840 *scene = (Scene840 *)BF_GLOBALS._sceneManager._scene;
|
||||
|
||||
switch (action) {
|
||||
case CURSOR_USE:
|
||||
if ((BF_GLOBALS._dayNumber == 4) && (BF_GLOBALS._bookmark >= bEndDayThree)) {
|
||||
SceneItem::display2(840, 9);
|
||||
} else {
|
||||
SceneItem::display2(840, 55);
|
||||
BF_INVENTORY.setObjectScene(INV_RENTAL_KEYS, 1);
|
||||
BF_GLOBALS._uiElements.addScore(30);
|
||||
|
||||
scene->_object2._v1B4 = 1;
|
||||
remove();
|
||||
}
|
||||
return true;
|
||||
default:
|
||||
return NamedObject::startAction(action, event);
|
||||
}
|
||||
}
|
||||
|
||||
bool Scene840::Object2::WaveKeys::startAction(CursorType action, Event &event) {
|
||||
Scene840 *scene = (Scene840 *)BF_GLOBALS._sceneManager._scene;
|
||||
|
||||
switch (action) {
|
||||
case CURSOR_USE:
|
||||
if (scene->_field1AC2) {
|
||||
SceneItem::display(840, 56);
|
||||
BF_INVENTORY.setObjectScene(INV_WAVE_KEYS, 1);
|
||||
BF_GLOBALS._uiElements.addScore(50);
|
||||
scene->_object2._v1B6 = 1;
|
||||
remove();
|
||||
} else {
|
||||
SceneItem::display2(840, 9);
|
||||
}
|
||||
return true;
|
||||
default:
|
||||
return NamedObject::startAction(action, event);
|
||||
}
|
||||
}
|
||||
|
||||
bool Scene840::Object6::startAction(CursorType action, Event &event) {
|
||||
Scene840 *scene = (Scene840 *)BF_GLOBALS._sceneManager._scene;
|
||||
|
||||
switch (action) {
|
||||
case CURSOR_LOOK:
|
||||
scene->_object1.postInit();
|
||||
BF_GLOBALS._player.disableControl();
|
||||
scene->_sceneMode = 8410;
|
||||
scene->setAction(&scene->_sequenceManager1, scene, 8410, &scene->_object1, &BF_GLOBALS._player, NULL);
|
||||
return true;
|
||||
case CURSOR_USE:
|
||||
BF_GLOBALS._player.disableControl();
|
||||
scene->_sceneMode = 8411;
|
||||
scene->setAction(&scene->_sequenceManager1, scene, 8411, &BF_GLOBALS._player, NULL);
|
||||
return true;
|
||||
case INV_WAVE_KEYS:
|
||||
case INV_RENTAL_KEYS:
|
||||
if ((BF_GLOBALS._dayNumber == 4) && (BF_GLOBALS._bookmark == bEndDayThree)) {
|
||||
BF_GLOBALS._player.disableControl();
|
||||
scene->_sceneMode = 8417;
|
||||
scene->setAction(&scene->_sequenceManager1, scene, 8417, &BF_GLOBALS._player, NULL);
|
||||
} else {
|
||||
SceneItem::display2(840, 47);
|
||||
}
|
||||
return true;
|
||||
default:
|
||||
return NamedObject::startAction(action, event);
|
||||
}
|
||||
}
|
||||
|
||||
bool Scene840::Carter::startAction(CursorType action, Event &event) {
|
||||
Scene840 *scene = (Scene840 *)BF_GLOBALS._sceneManager._scene;
|
||||
|
||||
switch (action) {
|
||||
case CURSOR_TALK:
|
||||
BF_GLOBALS._player.disableControl();
|
||||
scene->_sceneMode = 1;
|
||||
|
||||
if ((BF_GLOBALS._player._position.x != 219) || (BF_GLOBALS._player._position.y != 129)) {
|
||||
Common::Point pt(219, 129);
|
||||
PlayerMover *mover = new PlayerMover();
|
||||
BF_GLOBALS._player.addMover(mover, &pt, scene);
|
||||
} else {
|
||||
scene->signal();
|
||||
}
|
||||
return true;
|
||||
case INV_RENTAL_COUPON: {
|
||||
BF_GLOBALS._player.disableControl();
|
||||
scene->_sceneMode = 6;
|
||||
|
||||
Common::Point pt(219, 129);
|
||||
PlayerMover *mover = new PlayerMover();
|
||||
BF_GLOBALS._player.addMover(mover, &pt, scene);
|
||||
return true;
|
||||
}
|
||||
case INV_NICKEL:
|
||||
++BF_GLOBALS._v4CEB6;
|
||||
BF_GLOBALS._player.disableControl();
|
||||
|
||||
if (BF_INVENTORY.getObjectScene(INV_WAVE_KEYS) == 1) {
|
||||
if (!BF_GLOBALS.getFlag(fGotPointsForCombo)) {
|
||||
BF_GLOBALS._uiElements.addScore(50);
|
||||
BF_GLOBALS.setFlag(fGotPointsForCombo);
|
||||
}
|
||||
}
|
||||
|
||||
scene->_sceneMode = 8407;
|
||||
scene->setAction(&scene->_sequenceManager1, scene, 8407, &BF_GLOBALS._player, NULL);
|
||||
return true;
|
||||
case INV_CARTER_NOTE:
|
||||
BF_GLOBALS._player.disableControl();
|
||||
scene->_sceneMode = 8402;
|
||||
|
||||
if (!BF_GLOBALS._v4CEB6) {
|
||||
scene->setAction(&scene->_sequenceManager1, scene, 8402, &BF_GLOBALS._player, &scene->_carter, NULL);
|
||||
} else {
|
||||
scene->setAction(&scene->_sequenceManager1, scene, 8414, &BF_GLOBALS._player, &scene->_carter, NULL);
|
||||
}
|
||||
return true;
|
||||
default:
|
||||
return NamedObject::startAction(action, event);
|
||||
}
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
bool Scene840::Coins::startAction(CursorType action, Event &event) {
|
||||
Scene840 *scene = (Scene840 *)BF_GLOBALS._sceneManager._scene;
|
||||
|
||||
switch (action) {
|
||||
case CURSOR_LOOK:
|
||||
BF_GLOBALS._player.disableControl();
|
||||
scene->_sceneMode = 8404;
|
||||
scene->setAction(&scene->_sequenceManager1, scene, BF_GLOBALS.getFlag(onDuty) ? 8415 : 8404,
|
||||
&BF_GLOBALS._player, NULL);
|
||||
return true;
|
||||
default:
|
||||
return NamedHotspot::startAction(action, event);
|
||||
}
|
||||
}
|
||||
|
||||
bool Scene840::Exit::startAction(CursorType action, Event &event) {
|
||||
ADD_PLAYER_MOVER_NULL(BF_GLOBALS._player, 315, 150);
|
||||
return true;
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
Scene840::Scene840(): PalettedScene() {
|
||||
_field1ABC = 1;
|
||||
_field1ABE = 0;
|
||||
_field1AC0 = 0;
|
||||
_field1AC2 = 0;
|
||||
_field1AC4 = 0;
|
||||
_field1AC6 = (BF_GLOBALS._dayNumber > 3) ? 1 : 0;
|
||||
}
|
||||
|
||||
void Scene840::synchronize(Serializer &s) {
|
||||
PalettedScene::synchronize(s);
|
||||
error("TODO");
|
||||
}
|
||||
|
||||
void Scene840::postInit(SceneObjectList *OwnerList) {
|
||||
PalettedScene::postInit(OwnerList);
|
||||
BF_GLOBALS._sound1.changeSound(41);
|
||||
loadScene(840);
|
||||
_field1ABA = 0;
|
||||
|
||||
if (BF_GLOBALS._dayNumber == 0) {
|
||||
// Debugging mode setup
|
||||
BF_GLOBALS._dayNumber = 4;
|
||||
BF_INVENTORY.setObjectScene(INV_NICKEL, 1);
|
||||
BF_INVENTORY.setObjectScene(INV_RENTAL_COUPON, 1);
|
||||
}
|
||||
|
||||
setZoomPercents(0, 90, 110, 100);
|
||||
_exit.setDetails(Rect(310, 133, 320, 167), 840, -1, -1, -1, 1, NULL);
|
||||
|
||||
_stripManager.addSpeaker(&_gameTextSpeaker);
|
||||
_stripManager.addSpeaker(&_jakeJacketSpeaker);
|
||||
_stripManager.addSpeaker(&_jakeUniformSpeaker);
|
||||
_stripManager.addSpeaker(&_carterSpeaker);
|
||||
|
||||
BF_GLOBALS._player.postInit();
|
||||
BF_GLOBALS._player.changeZoom(-1);
|
||||
BF_GLOBALS._player._moveDiff.x = BF_GLOBALS.getFlag(onDuty) ? 8 : 7;
|
||||
|
||||
_object5.postInit();
|
||||
_object5.setVisage(840);
|
||||
_object5.setStrip(3);
|
||||
_object5.setPosition(Common::Point(157, 81));
|
||||
_object5.setDetails(840, 0, 1, 2, 1, NULL);
|
||||
|
||||
_carter.postInit();
|
||||
_carter.setVisage(843);
|
||||
_carter.setStrip(6);
|
||||
_carter.fixPriority(110);
|
||||
_carter.setPosition(Common::Point(262, 128));
|
||||
_carter.changeZoom(-1);
|
||||
|
||||
_item14.setDetails(1, 840, 29, 30, 31, 1);
|
||||
_item2.setDetails(Rect(6, 5, 85, 31), 840, 16, 14, 12, 1, NULL);
|
||||
_item3.setDetails(Rect(91, 7, 102, 26), 840, 17, 14, 12, 1, NULL);
|
||||
_item4.setDetails(Rect(6, 49, 80, 67), 840, 18, 15, 13, 1, NULL);
|
||||
_item5.setDetails(Rect(80, 29, 100, 65), 840, 19, 15, 13, 1, NULL);
|
||||
_item6.setDetails(Rect(104, 32, 127, 78), 840, 20, 15, 13, 1, NULL);
|
||||
_item7.setDetails(Rect(1, 106, 35, 166), 840, 21, 15, 13, 1, NULL);
|
||||
_item9.setDetails(Rect(205, 17, 251, 60), 840, 23, 15, 13, 1, NULL);
|
||||
_item10.setDetails(Rect(199, 56, 236, 80), 840, 24, 14, 12, 1, NULL);
|
||||
_item11.setDetails(Rect(256, 94, 319, 118), 840, 25, 15, 13, 1, NULL);
|
||||
_item18.setDetails(6, 840, 38, 39, 40, 1);
|
||||
_carter.setDetails(840, 3, 4, 5, 1, NULL);
|
||||
_item8.setDetails(Rect(259, 4, 319, 87), 840, 22, 15, 13, 1, NULL);
|
||||
_item15.setDetails(2, 840, 32, 33, 34, 1);
|
||||
_coins.setDetails(3, 840, -1, 6, 7, 1);
|
||||
_item16.setDetails(4, 840, 44, 45, 46, 1);
|
||||
_item17.setDetails(5, 840, 26, 27, 28, 1);
|
||||
_item12.setDetails(7, 840, 35, 36, 37, 1);
|
||||
_item13.setDetails(Rect(0, 0, SCREEN_WIDTH - 1, BF_INTERFACE_Y), 840, 41, 42, 43, 1, NULL);
|
||||
|
||||
if (BF_INVENTORY.getObjectScene(INV_RENTAL_KEYS) == 1) {
|
||||
_object6.postInit();
|
||||
_object6.setVisage(840);
|
||||
_object6.setStrip(4);
|
||||
_object6.setFrame(1);
|
||||
_object6.setPosition(Common::Point(250, 83));
|
||||
_object6.fixPriority(120);
|
||||
_object6.setDetails(840, -1, 8, 9, 2, NULL);
|
||||
_field1AC0 = 1;
|
||||
}
|
||||
|
||||
_sceneMode = BF_GLOBALS.getFlag(onDuty) ? 8401 : 8400;
|
||||
setAction(&_sequenceManager1, this, _sceneMode, &BF_GLOBALS._player, NULL);
|
||||
|
||||
if (BF_GLOBALS.getFlag(fWithLyle)) {
|
||||
_lyle.postInit();
|
||||
_lyle.setAction(&_sequenceManager2, NULL, 8405, &_lyle, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
void Scene840::signal() {
|
||||
switch (_sceneMode) {
|
||||
case 1:
|
||||
// Talking to Carter
|
||||
BF_GLOBALS._player._strip = 7;
|
||||
BF_GLOBALS._player._frame = 1;
|
||||
_sceneMode = 3;
|
||||
|
||||
switch (BF_GLOBALS._dayNumber) {
|
||||
case 1:
|
||||
if (_field1ABA == 1) {
|
||||
_stripManager.start(BF_GLOBALS.getFlag(onDuty) ? 8430 : 8406, this);
|
||||
} else if (!BF_GLOBALS.getFlag(onDuty)) {
|
||||
_stripManager.start(!BF_GLOBALS._v4CEB6 ? 8400 : 8406, this);
|
||||
} else if (BF_GLOBALS._bookmark < bStartOfGame) {
|
||||
_stripManager.start(!BF_GLOBALS._v4CEB6 ? 8429 : 8430, this);
|
||||
} else if (BF_GLOBALS._bookmark < bCalledToDomesticViolence) {
|
||||
_stripManager.start(!BF_GLOBALS._v4CEB6 ? 8402 : 8401, this);
|
||||
} else {
|
||||
_stripManager.start(!BF_GLOBALS._v4CEB6 ? 8404 : 8403, this);
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
_stripManager.start(!BF_GLOBALS._v4CEB6 ? 8405 : 8430, this);
|
||||
break;
|
||||
case 3:
|
||||
if (!BF_GLOBALS._v4CEB6) {
|
||||
_stripManager.start(BF_GLOBALS.getFlag(fWithLyle) ? 8409 : 8411, this);
|
||||
} else if (_field1ABA == 1) {
|
||||
_stripManager.start(8406, this);
|
||||
} else if (BF_GLOBALS.getFlag(fWithLyle)) {
|
||||
_stripManager.start(BF_GLOBALS.getFlag(fCarterMetLyle) ? 8415 : 8414, this);
|
||||
} else {
|
||||
_stripManager.start(8413, this);
|
||||
}
|
||||
|
||||
BF_GLOBALS.setFlag(fTalkedCarterDay3);
|
||||
break;
|
||||
case 4:
|
||||
if (!BF_GLOBALS._v4CEB6) {
|
||||
if (BF_GLOBALS.getFlag(fTalkedCarterDay3)) {
|
||||
if (BF_GLOBALS.getFlag(fWithLyle))
|
||||
_stripManager.start(BF_GLOBALS.getFlag(fCarterMetLyle) ? 8415 : 8414, this);
|
||||
else
|
||||
_stripManager.start(8413, this);
|
||||
} else if (BF_GLOBALS.getFlag(fWithLyle)) {
|
||||
_stripManager.start(BF_GLOBALS.getFlag(fCarterMetLyle) ? 8431 : 8409, this);
|
||||
} else {
|
||||
_stripManager.start(8411, this);
|
||||
}
|
||||
} else if (_field1ABA == 1) {
|
||||
_stripManager.start(8406, this);
|
||||
} else if (!BF_GLOBALS.getFlag(fWithLyle)) {
|
||||
_stripManager.start(8413, this);
|
||||
} else {
|
||||
_stripManager.start(BF_GLOBALS.getFlag(fCarterMetLyle) ? 8415 : 8414, this);
|
||||
}
|
||||
break;
|
||||
case 5:
|
||||
_stripManager.start((_field1ABA == 1) ? 8406 : 8413, this);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
_field1ABA = 1;
|
||||
break;
|
||||
case 2:
|
||||
BF_GLOBALS._sceneManager.changeScene(830);
|
||||
BF_GLOBALS._sound1.changeSound(10);
|
||||
break;
|
||||
case 3:
|
||||
case 8404:
|
||||
case 8416:
|
||||
BF_GLOBALS._player.enableControl();
|
||||
break;
|
||||
case 4:
|
||||
_sceneMode = 8403;
|
||||
_object6.postInit();
|
||||
_object6.setDetails(840, -1, 8, 9, 2, NULL);
|
||||
setAction(&_sequenceManager1, this, 8403, &_carter, &_object6, NULL);
|
||||
break;
|
||||
case 5:
|
||||
_sceneMode = 8408;
|
||||
setAction(&_sequenceManager1, this, 8408, &BF_GLOBALS._player, &_carter, &_object5, NULL);
|
||||
_field1AC2 = 1;
|
||||
break;
|
||||
case 6:
|
||||
BF_GLOBALS._player._strip = 7;
|
||||
BF_GLOBALS._player._frame = 1;
|
||||
|
||||
if ((BF_GLOBALS._dayNumber == 4) && (BF_GLOBALS._bookmark >= bEndDayThree)) {
|
||||
_stripManager.start(8440, this);
|
||||
_sceneMode = 3;
|
||||
} else if (BF_GLOBALS._sceneObjects->contains(&_object6)) {
|
||||
_stripManager.start(8442, this);
|
||||
_sceneMode = 3;
|
||||
} else if (_field1AC6) {
|
||||
_sceneMode = 4;
|
||||
_stripManager.start(BF_GLOBALS.getFlag(fWithLyle) ? 8424 : 8410, this);
|
||||
} else {
|
||||
_sceneMode = 3;
|
||||
_stripManager.start(8436, this);
|
||||
}
|
||||
break;
|
||||
case 8400:
|
||||
case 8401:
|
||||
BF_GLOBALS._player._strip = 7;
|
||||
BF_GLOBALS._player._frame = 1;
|
||||
BF_GLOBALS._player.enableControl();
|
||||
break;
|
||||
case 8402:
|
||||
BF_GLOBALS._player.enableControl();
|
||||
BF_GLOBALS._uiElements.addScore(30);
|
||||
BF_INVENTORY.setObjectScene(INV_CARTER_NOTE, 3);
|
||||
BF_INVENTORY.setObjectScene(INV_BASEBALL_CARD, 1);
|
||||
BF_INVENTORY.setObjectScene(INV_RENTAL_COUPON, 1);
|
||||
break;
|
||||
case 8403:
|
||||
BF_GLOBALS._uiElements.addScore(30);
|
||||
_sceneMode = 3;
|
||||
_field1AC0 = 1;
|
||||
_stripManager.start(8441, this);
|
||||
break;
|
||||
case 8407:
|
||||
if (((BF_GLOBALS._dayNumber == 4) && (BF_GLOBALS._bookmark >= bEndDayThree)) ||
|
||||
(BF_INVENTORY.getObjectScene(INV_WAVE_KEYS) == 1)) {
|
||||
_sceneMode = 8416;
|
||||
setAction(&_sequenceManager1, this, 8416, &BF_GLOBALS._player, NULL);
|
||||
} else {
|
||||
_stripManager.start(_field1ABE + 8419, this);
|
||||
_sceneMode = 5;
|
||||
|
||||
if (++_field1ABE == 4)
|
||||
_field1ABE = 1;
|
||||
}
|
||||
break;
|
||||
case 8408:
|
||||
if (_field1AC0) {
|
||||
BF_GLOBALS._player.enableControl();
|
||||
} else {
|
||||
_sceneMode = 8409;
|
||||
setAction(&_sequenceManager1, this, 8409, &BF_GLOBALS._player, &_carter, &_object5, NULL);
|
||||
}
|
||||
break;
|
||||
case 8409:
|
||||
_field1AC2 = 0;
|
||||
_sceneMode = 3;
|
||||
_stripManager.start(8423, this);
|
||||
break;
|
||||
case 8410:
|
||||
BF_GLOBALS._player.enableControl();
|
||||
_object1.remove();
|
||||
break;
|
||||
case 8411:
|
||||
BF_GLOBALS._player.enableControl();
|
||||
_object2.postInit();
|
||||
_object2.setVisage(840);
|
||||
_object2.setStrip(2);
|
||||
_object2.setPosition(Common::Point(160, 140));
|
||||
_object2.fixPriority(254);
|
||||
_object2.setDetails(840, 50, 8, 51);
|
||||
break;
|
||||
case 8412:
|
||||
if (_object2._v1B6) {
|
||||
_sceneMode = 8409;
|
||||
setAction(&_sequenceManager1, this, 8409, &BF_GLOBALS._player, &_carter, &_object5, NULL);
|
||||
} else if (!_object2._v1B4) {
|
||||
BF_GLOBALS._player.enableControl();
|
||||
} else {
|
||||
_sceneMode = 3;
|
||||
_field1AC0 = 1;
|
||||
|
||||
if (BF_GLOBALS._dayNumber == 5) {
|
||||
_stripManager.start(8425, this);
|
||||
} else {
|
||||
_stripManager.start(BF_GLOBALS.getFlag(INV_NICKEL) ? 8417 : 8416, this);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 8413:
|
||||
BF_GLOBALS._uiElements.addScore(50);
|
||||
_sceneMode = 8409;
|
||||
setAction(&_sequenceManager1, this, 8409, &BF_GLOBALS._player, &_carter, &_object5, NULL);
|
||||
break;
|
||||
case 8417:
|
||||
_field1ABA = 1;
|
||||
BF_GLOBALS._uiElements.addScore(50);
|
||||
BF_INVENTORY.setObjectScene(INV_WAVE_KEYS, 0);
|
||||
BF_INVENTORY.setObjectScene(INV_RENTAL_KEYS, 0);
|
||||
BF_GLOBALS._player.enableControl();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Scene840::process(Event &event) {
|
||||
SceneExt::process(event);
|
||||
|
||||
if (BF_GLOBALS._player._enabled && !_eventHandler && (event.mousePos.y < (BF_INTERFACE_Y - 1))) {
|
||||
if (_exit.contains(event.mousePos)) {
|
||||
GfxSurface surface = _cursorVisage.getFrame(EXITFRAME_E);
|
||||
BF_GLOBALS._events.setCursor(surface);
|
||||
} else {
|
||||
// In case an exit cursor was being shown, restore the previously selected cursor
|
||||
CursorType cursorId = BF_GLOBALS._events.getCursor();
|
||||
BF_GLOBALS._events.setCursor(cursorId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Scene840::dispatch() {
|
||||
SceneExt::dispatch();
|
||||
|
||||
if (_field1ABC && (BF_GLOBALS._player._position.x > 310) && !_action) {
|
||||
_field1ABC = 0;
|
||||
BF_GLOBALS._player.disableControl();
|
||||
_sceneMode = 2;
|
||||
ADD_PLAYER_MOVER(350, 150);
|
||||
|
||||
if (BF_GLOBALS.getFlag(fWithLyle)) {
|
||||
_lyle.setAction(&_sequenceManager2, NULL, 8406, &_lyle, NULL);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} // End of namespace BlueForce
|
||||
|
||||
} // End of namespace TsAGE
|
||||
|
@ -153,6 +153,75 @@ public:
|
||||
virtual void dispatch();
|
||||
};
|
||||
|
||||
class Scene840: public PalettedScene {
|
||||
/* Items */
|
||||
class Coins: public NamedHotspot {
|
||||
public:
|
||||
virtual bool startAction(CursorType action, Event &event);
|
||||
};
|
||||
class Exit: public NamedHotspot {
|
||||
public:
|
||||
virtual bool startAction(CursorType action, Event &event);
|
||||
};
|
||||
|
||||
/* Objects */
|
||||
class Object2: public FocusObject {
|
||||
class RentalKeys: public NamedObject {
|
||||
public:
|
||||
virtual bool startAction(CursorType action, Event &event);
|
||||
};
|
||||
class WaveKeys: public NamedObject {
|
||||
public:
|
||||
virtual bool startAction(CursorType action, Event &event);
|
||||
};
|
||||
public:
|
||||
RentalKeys _rentalKeys;
|
||||
WaveKeys _waveKeys;
|
||||
int _v1B4, _v1B6;
|
||||
|
||||
virtual void postInit(SceneObjectList *OwnerList = NULL);
|
||||
virtual void remove();
|
||||
virtual void process(Event &event);
|
||||
virtual bool startAction(CursorType action, Event &event);
|
||||
};
|
||||
class Object6: public NamedObject {
|
||||
public:
|
||||
virtual bool startAction(CursorType action, Event &event);
|
||||
};
|
||||
class Carter: public NamedObject {
|
||||
public:
|
||||
virtual bool startAction(CursorType action, Event &event);
|
||||
};
|
||||
|
||||
public:
|
||||
SequenceManager _sequenceManager1, _sequenceManager2;
|
||||
NamedObject _object1;
|
||||
Object2 _object2;
|
||||
NamedObject _object5;
|
||||
Object6 _object6;
|
||||
Carter _carter;
|
||||
NamedObject _lyle;
|
||||
Coins _coins;
|
||||
NamedHotspot _item2, _item3, _item4, _item5, _item6;
|
||||
NamedHotspot _item7, _item8, _item9, _item10, _item11;
|
||||
NamedHotspot _item12, _item13, _item14, _item15;
|
||||
NamedHotspot _item16, _item17, _item18;
|
||||
Exit _exit;
|
||||
SpeakerGameText _gameTextSpeaker;
|
||||
SpeakerJakeJacket _jakeJacketSpeaker;
|
||||
SpeakerJakeUniform _jakeUniformSpeaker;
|
||||
SpeakerCarter _carterSpeaker;
|
||||
int _field1ABA, _field1ABC, _field1ABE, _field1AC0;
|
||||
int _field1AC2, _field1AC4, _field1AC6;
|
||||
|
||||
Scene840();
|
||||
virtual void synchronize(Serializer &s);
|
||||
virtual void postInit(SceneObjectList *OwnerList = NULL);
|
||||
virtual void signal();
|
||||
virtual void process(Event &event);
|
||||
virtual void dispatch();
|
||||
};
|
||||
|
||||
|
||||
} // End of namespace BlueForce
|
||||
|
||||
|
@ -397,6 +397,32 @@ void SpeakerSkipB::setText(const Common::String &msg) {
|
||||
_object2.fixCountdown(8, _numFrames);
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
SpeakerCarter::SpeakerCarter(): VisualSpeaker() {
|
||||
_color1 = 89;
|
||||
_color2 = 95;
|
||||
_speakerName = "CARTER";
|
||||
}
|
||||
|
||||
void SpeakerCarter::setText(const Common::String &msg) {
|
||||
_removeObject1 = _removeObject2 = true;
|
||||
|
||||
_object1.postInit();
|
||||
_object1.setVisage(844);
|
||||
_object1.setStrip2(8);
|
||||
_object1.fixPriority(254);
|
||||
_object1.setPosition(Common::Point(78, 166));
|
||||
|
||||
_object2.postInit();
|
||||
_object2.setVisage(844);
|
||||
_object2.fixPriority(255);
|
||||
_object2.setPosition(Common::Point(78, 166));
|
||||
|
||||
VisualSpeaker::setText(msg);
|
||||
_object2.fixCountdown(8, _numFrames);
|
||||
}
|
||||
|
||||
} // End of namespace BlueForce
|
||||
|
||||
} // End of namespace TsAGE
|
||||
|
@ -155,6 +155,13 @@ public:
|
||||
virtual void setText(const Common::String &msg);
|
||||
};
|
||||
|
||||
class SpeakerCarter: public VisualSpeaker {
|
||||
public:
|
||||
SpeakerCarter();
|
||||
|
||||
virtual Common::String getClassName() { return "SpeakerCarter"; }
|
||||
virtual void setText(const Common::String &msg);
|
||||
};
|
||||
|
||||
} // End of namespace BlueForce
|
||||
|
||||
|
@ -206,6 +206,7 @@ void BlueForceGlobals::synchronize(Serializer &s) {
|
||||
s.syncAsSint16LE(_clip1Bullets);
|
||||
s.syncAsSint16LE(_clip2Bullets);
|
||||
s.syncAsSint16LE(_v4CEB4);
|
||||
s.syncAsSint16LE(_v4CEB6);
|
||||
}
|
||||
|
||||
void BlueForceGlobals::reset() {
|
||||
@ -237,6 +238,7 @@ void BlueForceGlobals::reset() {
|
||||
_clip1Bullets = 8;
|
||||
_clip2Bullets = 8;
|
||||
_v4CEB4 = 0;
|
||||
_v4CEB6 = 0;
|
||||
}
|
||||
|
||||
bool BlueForceGlobals::getHasBullets() {
|
||||
|
@ -170,6 +170,7 @@ public:
|
||||
int _dayNumber;
|
||||
int _v4CEA4;
|
||||
int _v4CEB4;
|
||||
int _v4CEB6;
|
||||
int _deathReason;
|
||||
int _driveFromScene;
|
||||
int _driveToScene;
|
||||
|
Loading…
Reference in New Issue
Block a user