aboutsummaryrefslogtreecommitdiff
path: root/engines/tsage
diff options
context:
space:
mode:
authorPaul Gilbert2011-09-08 20:41:10 +1000
committerPaul Gilbert2011-09-08 20:41:10 +1000
commit8b17e8a9b841bea6810c519143a7a3cd44521497 (patch)
treeeb967c5e39a7ed179bc94197e101b879dfa3f9d3 /engines/tsage
parent88e68abd4b0e2b8430395cc0ad87dac45ef974c6 (diff)
downloadscummvm-rg350-8b17e8a9b841bea6810c519143a7a3cd44521497.tar.gz
scummvm-rg350-8b17e8a9b841bea6810c519143a7a3cd44521497.tar.bz2
scummvm-rg350-8b17e8a9b841bea6810c519143a7a3cd44521497.zip
TSAGE: More core functionality needed for Blue Force
Diffstat (limited to 'engines/tsage')
-rw-r--r--engines/tsage/blue_force/blueforce_logic.cpp304
-rw-r--r--engines/tsage/blue_force/blueforce_logic.h55
-rw-r--r--engines/tsage/blue_force/blueforce_scenes1.cpp14
-rw-r--r--engines/tsage/blue_force/blueforce_scenes1.h8
-rw-r--r--engines/tsage/blue_force/blueforce_ui.cpp22
-rw-r--r--engines/tsage/blue_force/blueforce_ui.h6
-rw-r--r--engines/tsage/converse.cpp11
-rw-r--r--engines/tsage/converse.h7
-rw-r--r--engines/tsage/core.cpp15
-rw-r--r--engines/tsage/core.h5
-rw-r--r--engines/tsage/events.h2
-rw-r--r--engines/tsage/globals.cpp1
-rw-r--r--engines/tsage/globals.h2
-rw-r--r--engines/tsage/module.mk2
14 files changed, 196 insertions, 258 deletions
diff --git a/engines/tsage/blue_force/blueforce_logic.cpp b/engines/tsage/blue_force/blueforce_logic.cpp
index 99e3c38850..616a7738af 100644
--- a/engines/tsage/blue_force/blueforce_logic.cpp
+++ b/engines/tsage/blue_force/blueforce_logic.cpp
@@ -84,6 +84,8 @@ Scene *BlueForceGame::createScene(int sceneNumber) {
// Outside Police Station
return new Scene300();
case 315:
+ // Inside Police Station
+ return new Scene315();
case 325:
case 330:
case 340:
@@ -360,7 +362,7 @@ void NamedObject::synchronize(Serializer &s) {
s.syncAsSint16LE(_useLineNum);
}
-void NamedObject::startAction(CursorType action) {
+void NamedObject::startAction(CursorType action, Event &event) {
bool handled = true;
switch (action) {
@@ -498,10 +500,13 @@ void FollowerObject::setup(SceneObject *object, int visage, int frameNum, int yD
/*--------------------------------------------------------------------------*/
SceneExt::SceneExt(): Scene() {
- warning("TODO: dword_503AA/dword_503AE/dword_53030");
+ _stripManager._onBegin = SceneExt::startStrip;
+ _stripManager._onEnd = SceneExt::endStrip;
- _field372 = 0;
- _field37A = 0;
+ _field372 = _field37A = 0;
+ _savedPlayerEnabled = false;
+ _savedUiEnabled = false;
+ _savedCanWalk = false;
_eventHandler = NULL;
_cursorVisage.setVisage(1, 8);
}
@@ -599,6 +604,35 @@ void SceneExt::gunDisplay() {
}
}
+void SceneExt::startStrip() {
+ SceneExt *scene = (SceneExt *)BF_GLOBALS._sceneManager._scene;
+ scene->_field372 = 1;
+ scene->_savedPlayerEnabled = BF_GLOBALS._player._enabled;
+
+ if (scene->_savedPlayerEnabled) {
+ scene->_savedUiEnabled = BF_GLOBALS._player._uiEnabled;
+ scene->_savedCanWalk = BF_GLOBALS._player._canWalk;
+ BF_GLOBALS._player.disableControl();
+
+ if (!BF_GLOBALS._v50696 && BF_GLOBALS._uiElements._active)
+ BF_GLOBALS._uiElements.hide();
+ }
+}
+
+void SceneExt::endStrip() {
+ SceneExt *scene = (SceneExt *)BF_GLOBALS._sceneManager._scene;
+ scene->_field372 = 0;
+
+ if (scene->_savedPlayerEnabled) {
+ BF_GLOBALS._player.enableControl();
+ BF_GLOBALS._player._uiEnabled = scene->_savedUiEnabled;
+ BF_GLOBALS._player._canWalk = scene->_savedCanWalk;
+
+ if (!BF_GLOBALS._v50696 && BF_GLOBALS._uiElements._active)
+ BF_GLOBALS._uiElements.show();
+ }
+}
+
/*--------------------------------------------------------------------------*/
GroupedScene::GroupedScene() {
@@ -644,145 +678,17 @@ void SceneHandlerExt::process(Event &event) {
return;
}
- SceneHandler::process(event);
-
- // TODO: All the new stuff from Blue Force
-}
-
-/*--------------------------------------------------------------------------*/
-
-VisualSpeaker::VisualSpeaker(): Speaker() {
- _textWidth = 312;
- _color1 = 19;
- _hideObjects = false;
- _removeObject1 = false;
- _removeObject2 = false;
- _field20E = 160;
- _fontNumber = 4;
- _color2 = 82;
- _offsetPos = Common::Point(4, 170);
- _numFrames = 0;
-}
-
-void VisualSpeaker::remove() {
- if (_removeObject2)
- _object2.remove();
- if (_removeObject1)
- _object1.remove();
-
- Speaker::remove();
-}
-
-void VisualSpeaker::synchronize(Serializer &s) {
- Speaker::synchronize(s);
-
- s.syncAsByte(_removeObject1);
- s.syncAsByte(_removeObject2);
- s.syncAsSint16LE(_field20C);
- s.syncAsSint16LE(_field20E);
- s.syncAsSint16LE(_numFrames);
- s.syncAsSint16LE(_offsetPos.x);
- s.syncAsSint16LE(_offsetPos.y);
-}
-
-void VisualSpeaker::proc12(Action *action) {
- Speaker::proc12(action);
- _textPos = Common::Point(_offsetPos.x + BF_GLOBALS._sceneManager._scene->_sceneBounds.left,
- _offsetPos.y + BF_GLOBALS._sceneManager._scene->_sceneBounds.top);
- _numFrames = 0;
-}
-
-void VisualSpeaker::setText(const Common::String &msg) {
- _objectList.draw();
- BF_GLOBALS._sceneObjects->draw();
-
- _sceneText._color1 = _color1;
- _sceneText._color2 = _color2;
- _sceneText._color3 = _color3;
- _sceneText._width = _textWidth;
- _sceneText._fontNumber = _fontNumber;
- _sceneText._textMode = _textMode;
- _sceneText.setup(msg);
-
- // Get the string bounds
- GfxFont f;
- f.setFontNumber(_fontNumber);
- Rect bounds;
- f.getStringBounds(msg.c_str(), bounds, _textWidth);
-
- // Set the position for the text
- switch (_textMode) {
- case ALIGN_LEFT:
- case ALIGN_JUSTIFIED:
- _sceneText.setPosition(_textPos);
- break;
- case ALIGN_CENTER:
- _sceneText.setPosition(Common::Point(_textPos.x + (_textWidth - bounds.width()) / 2, _textPos.y));
- break;
- case ALIGN_RIGHT:
- _sceneText.setPosition(Common::Point(_textPos.x + _textWidth - bounds.width(), _textPos.y));
- break;
- default:
- break;
- }
-
- // Ensure the text is in the foreground
- _sceneText.fixPriority(256);
-
- // Count the number of words (by spaces) in the string
- const char *s = msg.c_str();
- int spaceCount = 0;
- while (*s) {
- if (*s++ == ' ')
- ++spaceCount;
+ // If the strip proxy is currently being controlled by the strip manager,
+ // then pass all events to it first
+ if (BF_GLOBALS._stripProxy._action) {
+ BF_GLOBALS._stripProxy._action->process(event);
+ if (event.handled)
+ return;
}
- _numFrames = spaceCount * 3 + 2;
-}
-
-/*--------------------------------------------------------------------------*/
-
-SpeakerSutter::SpeakerSutter() {
- _speakerName = "SUTTER";
- _color1 = 20;
- _color2 = 22;
- _textMode = ALIGN_CENTER;
-}
-
-void SpeakerSutter::setText(const Common::String &msg) {
- _removeObject1 = _removeObject2 = true;
-
- _object1.postInit();
- _object1.setVisage(329);
- _object1.setStrip2(2);
- _object1.fixPriority(254);
- _object1.changeZoom(100);
- _object1.setPosition(Common::Point(BF_GLOBALS._sceneManager._scene->_sceneBounds.left + 45,
- BF_GLOBALS._sceneManager._scene->_sceneBounds.top + 166));
-
- _object2.postInit();
- _object2.setVisage(329);
- _object2.setStrip2(1);
- _object2.fixPriority(255);
- _object1.setPosition(Common::Point(BF_GLOBALS._sceneManager._scene->_sceneBounds.left + 45,
- BF_GLOBALS._sceneManager._scene->_sceneBounds.top + 166));
-
- VisualSpeaker::setText(msg);
- _object2.fixCountdown(8, _numFrames);
-}
-
-/*--------------------------------------------------------------------------*/
-
-SpeakerDoug::SpeakerDoug(): VisualSpeaker() {
- _color1 = 32;
- _speakerName = "DOUG";
-}
-
-/*--------------------------------------------------------------------------*/
+ SceneHandler::process(event);
-SpeakerJakeNoHead::SpeakerJakeNoHead(): VisualSpeaker() {
- _color1 = 13;
- _speakerName = "JAKE_NO_HEAD";
+ // TODO: All the new stuff from Blue Force
}
/*--------------------------------------------------------------------------*/
@@ -936,66 +842,66 @@ void BlueForceInvObjectList::reset() {
}
// Set up default inventory
- setObjectRoom(INV_COLT45, 1);
- setObjectRoom(INV_HANDCUFFS, 1);
- setObjectRoom(INV_AMMO_BELT, 1);
- setObjectRoom(INV_ID, 1);
+ setObjectScene(INV_COLT45, 1);
+ setObjectScene(INV_HANDCUFFS, 1);
+ setObjectScene(INV_AMMO_BELT, 1);
+ setObjectScene(INV_ID, 1);
// Set default room for other objects
- setObjectRoom(INV_TICKET_BOOK, 60);
- setObjectRoom(INV_MIRANDA_CARD, 60);
- setObjectRoom(INV_FOREST_RAP, 320);
- setObjectRoom(INV_GREEN_ID, 370);
- setObjectRoom(INV_BASEBALL_CARD, 840);
- setObjectRoom(INV_BOOKING_GREEN, 390);
- setObjectRoom(INV_FLARE, 355);
- setObjectRoom(INV_COBB_RAPP, 810);
- setObjectRoom(INV_22_BULLET, 415);
- setObjectRoom(INV_AUTO_RIFLE, 415);
- setObjectRoom(INV_WIG, 415);
- setObjectRoom(INV_FRANKIE_ID, 410);
- setObjectRoom(INV_TYRONE_ID, 410);
- setObjectRoom(INV_22_SNUB, 410);
- setObjectRoom(INV_FBI_TELETYPE, 320);
- setObjectRoom(INV_DA_NOTE, 320);
- setObjectRoom(INV_PRINT_OUT, 570);
- setObjectRoom(INV_WHAREHOUSE_KEYS, 360);
- setObjectRoom(INV_CENTER_PUNCH, 0);
- setObjectRoom(INV_TRANQ_GUN, 830);
- setObjectRoom(INV_HOOK, 350);
- setObjectRoom(INV_RAGS, 870);
- setObjectRoom(INV_JAR, 870);
- setObjectRoom(INV_SCREWDRIVER, 355);
- setObjectRoom(INV_D_FLOPPY, 570);
- setObjectRoom(INV_BLANK_DISK, 560);
- setObjectRoom(INV_STICK, 710);
- setObjectRoom(INV_CRATE1, 710);
- setObjectRoom(INV_CRATE2, 870);
- setObjectRoom(INV_SHOEBOX, 270);
- setObjectRoom(INV_BADGE, 560);
- setObjectRoom(INV_RENTAL_COUPON, 0);
- setObjectRoom(INV_NICKEL, 560);
- setObjectRoom(INV_LYLE_CARD, 270);
- setObjectRoom(INV_CARTER_NOTE, 830);
- setObjectRoom(INV_MUG_SHOT, 810);
- setObjectRoom(INV_CLIPPING, 810);
- setObjectRoom(INV_MICROFILM, 810);
- setObjectRoom(INV_WAVE_KEYS, 840);
- setObjectRoom(INV_RENTAL_KEYS, 840);
- setObjectRoom(INV_NAPKIN, 115);
- setObjectRoom(INV_DMV_PRINTOUT, 810);
- setObjectRoom(INV_FISHING_NET, 830);
- setObjectRoom(INV_9MM_BULLETS, 930);
- setObjectRoom(INV_SCHEDULE, 930);
- setObjectRoom(INV_GRENADES, 355);
- setObjectRoom(INV_GREENS_KNIFE, 370);
- setObjectRoom(INV_JACKET, 880);
- setObjectRoom(INV_DOG_WHISTLE, 880);
- setObjectRoom(INV_YELLOW_CORD, 910);
- setObjectRoom(INV_BLACK_CORD, 910);
-}
-
-void BlueForceInvObjectList::setObjectRoom(int objectNum, int sceneNumber) {
+ setObjectScene(INV_TICKET_BOOK, 60);
+ setObjectScene(INV_MIRANDA_CARD, 60);
+ setObjectScene(INV_FOREST_RAP, 320);
+ setObjectScene(INV_GREEN_ID, 370);
+ setObjectScene(INV_BASEBALL_CARD, 840);
+ setObjectScene(INV_BOOKING_GREEN, 390);
+ setObjectScene(INV_FLARE, 355);
+ setObjectScene(INV_COBB_RAP, 810);
+ setObjectScene(INV_22_BULLET, 415);
+ setObjectScene(INV_AUTO_RIFLE, 415);
+ setObjectScene(INV_WIG, 415);
+ setObjectScene(INV_FRANKIE_ID, 410);
+ setObjectScene(INV_TYRONE_ID, 410);
+ setObjectScene(INV_22_SNUB, 410);
+ setObjectScene(INV_FBI_TELETYPE, 320);
+ setObjectScene(INV_DA_NOTE, 320);
+ setObjectScene(INV_PRINT_OUT, 570);
+ setObjectScene(INV_WHAREHOUSE_KEYS, 360);
+ setObjectScene(INV_CENTER_PUNCH, 0);
+ setObjectScene(INV_TRANQ_GUN, 830);
+ setObjectScene(INV_HOOK, 350);
+ setObjectScene(INV_RAGS, 870);
+ setObjectScene(INV_JAR, 870);
+ setObjectScene(INV_SCREWDRIVER, 355);
+ setObjectScene(INV_D_FLOPPY, 570);
+ setObjectScene(INV_BLANK_DISK, 560);
+ setObjectScene(INV_STICK, 710);
+ setObjectScene(INV_CRATE1, 710);
+ setObjectScene(INV_CRATE2, 870);
+ setObjectScene(INV_SHOEBOX, 270);
+ setObjectScene(INV_BADGE, 560);
+ setObjectScene(INV_RENTAL_COUPON, 0);
+ setObjectScene(INV_NICKEL, 560);
+ setObjectScene(INV_LYLE_CARD, 270);
+ setObjectScene(INV_CARTER_NOTE, 830);
+ setObjectScene(INV_MUG_SHOT, 810);
+ setObjectScene(INV_CLIPPING, 810);
+ setObjectScene(INV_MICROFILM, 810);
+ setObjectScene(INV_WAVE_KEYS, 840);
+ setObjectScene(INV_RENTAL_KEYS, 840);
+ setObjectScene(INV_NAPKIN, 115);
+ setObjectScene(INV_DMV_PRINTOUT, 810);
+ setObjectScene(INV_FISHING_NET, 830);
+ setObjectScene(INV_9MM_BULLETS, 930);
+ setObjectScene(INV_SCHEDULE, 930);
+ setObjectScene(INV_GRENADES, 355);
+ setObjectScene(INV_GREENS_KNIFE, 370);
+ setObjectScene(INV_JACKET, 880);
+ setObjectScene(INV_DOG_WHISTLE, 880);
+ setObjectScene(INV_YELLOW_CORD, 910);
+ setObjectScene(INV_BLACK_CORD, 910);
+}
+
+void BlueForceInvObjectList::setObjectScene(int objectNum, int sceneNumber) {
// Find the appropriate object
int num = objectNum;
SynchronizedList<InvObject *>::iterator i = _itemList.begin();
@@ -1010,6 +916,8 @@ void BlueForceInvObjectList::setObjectRoom(int objectNum, int sceneNumber) {
BF_GLOBALS._uiElements.updateInventory();
}
+/*--------------------------------------------------------------------------*/
+
} // End of namespace BlueForce
} // End of namespace TsAGE
diff --git a/engines/tsage/blue_force/blueforce_logic.h b/engines/tsage/blue_force/blueforce_logic.h
index c4c1b22efd..b2cab69402 100644
--- a/engines/tsage/blue_force/blueforce_logic.h
+++ b/engines/tsage/blue_force/blueforce_logic.h
@@ -35,7 +35,7 @@ namespace BlueForce {
using namespace TsAGE;
-#define BLUE_INVENTORY (*((::TsAGE::BlueForce::BlueForceInvObjectList *)_globals->_inventory))
+#define BF_INVENTORY (*((::TsAGE::BlueForce::BlueForceInvObjectList *)_globals->_inventory))
class BlueForceGame: public Game {
public:
@@ -107,7 +107,7 @@ public:
virtual Common::String getClassName() { return "NamedObject"; }
virtual void synchronize(Serializer &s);
virtual void postInit(SceneObjectList *OwnerList = NULL);
- virtual void startAction(CursorType action);
+ virtual void startAction(CursorType action, Event &event);
void setup(int resNum, int lookLineNum, int talkLineNum, int useLineNum, int mode, SceneItem *item);
};
@@ -137,15 +137,22 @@ public:
void setup(SceneObject *object, int visage, int frameNum, int yDiff);
};
-enum ExitFrame { EXITFRAME_NE = 2, EXITFRAME_E = 3 };
+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 };
class SceneExt: public Scene {
private:
void gunDisplay();
+ static void startStrip();
+ static void endStrip();
public:
AObjectArray _timerList, _objArray2;
int _field372;
+ bool _savedPlayerEnabled;
+ bool _savedUiEnabled;
+ bool _savedCanWalk;
int _field37A;
+
EventHandler *_eventHandler;
Visage _cursorVisage;
@@ -182,46 +189,6 @@ public:
virtual void process(Event &event);
};
-class VisualSpeaker: public Speaker {
-public:
- NamedObject _object1;
- CountdownObject _object2;
- bool _removeObject1, _removeObject2;
- int _field20C, _field20E;
- int _numFrames;
- Common::Point _offsetPos;
-public:
- VisualSpeaker();
-
- virtual Common::String getClassName() { return "VisualSpeaker"; }
- virtual void synchronize(Serializer &s);
- virtual void remove();
- virtual void proc12(Action *action);
- virtual void setText(const Common::String &msg);
-};
-
-class SpeakerSutter: public VisualSpeaker {
-public:
- SpeakerSutter();
-
- virtual Common::String getClassName() { return "SpeakerSutter"; }
- virtual void setText(const Common::String &msg);
-};
-
-class SpeakerDoug: public VisualSpeaker {
-public:
- SpeakerDoug();
-
- virtual Common::String getClassName() { return "SpeakerDoug"; }
-};
-
-class SpeakerJakeNoHead: public VisualSpeaker {
-public:
- SpeakerJakeNoHead();
-
- virtual Common::String getClassName() { return "SpeakerJakeNoHead"; }
-};
-
class BlueForceInvObjectList : public InvObjectList {
public:
InvObject _none;
@@ -295,7 +262,7 @@ public:
BlueForceInvObjectList();
void reset();
- void setObjectRoom(int objectNum, int sceneNumber);
+ void setObjectScene(int objectNum, int sceneNumber);
virtual Common::String getClassName() { return "BlueForceInvObjectList"; }
};
diff --git a/engines/tsage/blue_force/blueforce_scenes1.cpp b/engines/tsage/blue_force/blueforce_scenes1.cpp
index acb1592abc..3ff8296c54 100644
--- a/engines/tsage/blue_force/blueforce_scenes1.cpp
+++ b/engines/tsage/blue_force/blueforce_scenes1.cpp
@@ -432,7 +432,7 @@ void Scene109::signal() {
*
*--------------------------------------------------------------------------*/
-void Scene190::Object4::startAction(CursorType action) {
+void Scene190::Object4::startAction(CursorType action, Event &event) {
Scene190 *scene = (Scene190 *)BF_GLOBALS._sceneManager._scene;
switch (action) {
@@ -445,14 +445,14 @@ void Scene190::Object4::startAction(CursorType action) {
break;
}
default:
- NamedObject::startAction(action);
+ NamedObject::startAction(action, event);
break;
}
}
/*--------------------------------------------------------------------------*/
-void Scene190::Item1::startAction(CursorType action) {
+void Scene190::Item1::startAction(CursorType action, Event &event) {
Scene190 *scene = (Scene190 *)BF_GLOBALS._sceneManager._scene;
switch (action) {
@@ -460,12 +460,12 @@ void Scene190::Item1::startAction(CursorType action) {
scene->setAction(&scene->_action1);
break;
default:
- NamedHotspot::startAction(action);
+ NamedHotspot::startAction(action, event);
break;
}
}
-void Scene190::Item2::startAction(CursorType action) {
+void Scene190::Item2::startAction(CursorType action, Event &event) {
Scene190 *scene = (Scene190 *)BF_GLOBALS._sceneManager._scene;
switch (action) {
@@ -473,12 +473,12 @@ void Scene190::Item2::startAction(CursorType action) {
scene->_stripManager.start(1900, scene);
break;
default:
- NamedHotspot::startAction(action);
+ NamedHotspot::startAction(action, event);
break;
}
}
-void Scene190::Exit::startAction(CursorType action) {
+void Scene190::Exit::startAction(CursorType action, Event &event) {
Scene190 *scene = (Scene190 *)BF_GLOBALS._sceneManager._scene;
Common::Point pt(316, 91);
diff --git a/engines/tsage/blue_force/blueforce_scenes1.h b/engines/tsage/blue_force/blueforce_scenes1.h
index 3f4d1cb3d2..6eeeff9eb8 100644
--- a/engines/tsage/blue_force/blueforce_scenes1.h
+++ b/engines/tsage/blue_force/blueforce_scenes1.h
@@ -128,21 +128,21 @@ class Scene190: public SceneExt {
/* Objects */
class Object4: public NamedObject {
public:
- virtual void startAction(CursorType action);
+ virtual void startAction(CursorType action, Event &event);
};
/* Items */
class Item1: public NamedHotspot {
public:
- virtual void startAction(CursorType action);
+ virtual void startAction(CursorType action, Event &event);
};
class Item2: public NamedHotspot {
public:
- virtual void startAction(CursorType action);
+ virtual void startAction(CursorType action, Event &event);
};
class Exit: public NamedHotspot {
public:
- virtual void startAction(CursorType action);
+ virtual void startAction(CursorType action, Event &event);
};
/* Actions */
diff --git a/engines/tsage/blue_force/blueforce_ui.cpp b/engines/tsage/blue_force/blueforce_ui.cpp
index 8fc686090e..81411b1d82 100644
--- a/engines/tsage/blue_force/blueforce_ui.cpp
+++ b/engines/tsage/blue_force/blueforce_ui.cpp
@@ -30,6 +30,13 @@ namespace TsAGE {
namespace BlueForce {
+void StripProxy::process(Event &event) {
+ if (_action)
+ _action->process(event);
+}
+
+/*--------------------------------------------------------------------------*/
+
void UIElement::synchronize(Serializer &s) {
AltSceneObject::synchronize(s);
s.syncAsSint16LE(_field88);
@@ -85,12 +92,16 @@ void UIQuestion::setEnabled(bool flag) {
void UIScore::postInit(SceneObjectList *OwnerList) {
int xp = 266;
_digit3.setup(1, 6, 1, xp, 180, 255);
+ _digit3.reposition();
xp += 7;
_digit2.setup(1, 6, 1, xp, 180, 255);
+ _digit2.reposition();
xp += 7;
_digit1.setup(1, 6, 1, xp, 180, 255);
+ _digit1.reposition();
xp += 7;
_digit0.setup(1, 6, 1, xp, 180, 255);
+ _digit0.reposition();
}
void UIScore::draw() {
@@ -355,7 +366,7 @@ void UIElements::updateInventory() {
// Loop through the inventory objects
SynchronizedList<InvObject *>::iterator i;
int objIndex = 0;
- for (i = BLUE_INVENTORY._itemList.begin(); i != BLUE_INVENTORY._itemList.end(); ++i, ++objIndex) {
+ for (i = BF_INVENTORY._itemList.begin(); i != BF_INVENTORY._itemList.end(); ++i, ++objIndex) {
InvObject *obj = *i;
// Check whether the object is in any of the four inventory slots
@@ -396,6 +407,15 @@ void UIElements::updateInvList() {
}
}
+/**
+ * Set the game score
+ */
+void UIElements::addScore(int amount) {
+ _scoreValue += amount;
+ BF_GLOBALS._sound2.play(0);
+ updateInventory();
+}
+
} // End of namespace BlueForce
} // End of namespace TsAGE
diff --git a/engines/tsage/blue_force/blueforce_ui.h b/engines/tsage/blue_force/blueforce_ui.h
index 766f7dd6e5..8dae914f55 100644
--- a/engines/tsage/blue_force/blueforce_ui.h
+++ b/engines/tsage/blue_force/blueforce_ui.h
@@ -33,6 +33,11 @@ namespace BlueForce {
using namespace TsAGE;
+class StripProxy: public EventHandler {
+public:
+ virtual void process(Event &event);
+};
+
class UIElement: public AltSceneObject {
public:
int _field88;
@@ -132,6 +137,7 @@ public:
void setup(const Common::Point &pt);
void updateInventory();
+ void addScore(int amount);
};
} // End of namespace BlueForce
diff --git a/engines/tsage/converse.cpp b/engines/tsage/converse.cpp
index af9bca238d..32a4861036 100644
--- a/engines/tsage/converse.cpp
+++ b/engines/tsage/converse.cpp
@@ -40,6 +40,7 @@ SequenceManager::SequenceManager() : Action() {
_field26 = 0;
_objectIndex = 0;
_keepActive = false;
+ _onCallback = NULL;
setup();
}
@@ -295,7 +296,8 @@ void SequenceManager::signal() {
case 37:
v1 = getNextValue();
v2 = getNextValue();
- warning("TODO: dword_53030(%d,%d)", v1, v2);
+ if (_onCallback)
+ _onCallback(v1, v2);
break;
case 38: {
int resNum = getNextValue();
@@ -558,6 +560,8 @@ void Obj44::synchronize(Serializer &s) {
StripManager::StripManager() {
_callbackObject = NULL;
_activeSpeaker = NULL;
+ _onBegin = NULL;
+ _onEnd = NULL;
reset();
}
@@ -565,6 +569,8 @@ StripManager::~StripManager() {
}
void StripManager::start(int stripNum, EventHandler *owner, StripCallback *callback) {
+ if (_onBegin)
+ _onBegin();
reset();
_stripNum = stripNum;
@@ -678,6 +684,9 @@ void StripManager::remove() {
_globals->_sceneManager._scene->loadScene(_sceneNumber);
}
+ if (_onEnd)
+ _onEnd();
+
Action::remove();
}
diff --git a/engines/tsage/converse.h b/engines/tsage/converse.h
index e263a12d12..f82c07a7dd 100644
--- a/engines/tsage/converse.h
+++ b/engines/tsage/converse.h
@@ -34,6 +34,8 @@ public:
virtual void stripCallback(int v) = 0;
};
+typedef void (*SequenceCallback)(int v1, int v2);
+
class SequenceManager : public Action {
private:
void setup();
@@ -54,6 +56,7 @@ public:
SceneObject *_sceneObject;
SceneObject *_objectList[6];
ASound _soundHandler;
+ SequenceCallback _onCallback;
public:
SequenceManager();
@@ -187,6 +190,8 @@ public:
virtual void synchronize(Serializer &s);
};
+typedef void (*StripProc)();
+
class StripManager : public Action {
private:
void reset();
@@ -208,6 +213,8 @@ public:
int _field2E8;
Common::Array<Obj44> _obj44List;
Common::Array<byte> _script;
+ StripProc _onBegin;
+ StripProc _onEnd;
public:
StripManager();
virtual ~StripManager();
diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp
index 21d5390f62..7dff8c0d89 100644
--- a/engines/tsage/core.cpp
+++ b/engines/tsage/core.cpp
@@ -106,6 +106,19 @@ int InvObjectList::indexOf(InvObject *obj) const {
return -1;
}
+InvObject *InvObjectList::getItem(int objectNum) {
+ SynchronizedList<InvObject *>::const_iterator i = _itemList.begin();
+ while (objectNum-- > 0)
+ ++i;
+
+ return *i;
+}
+
+int InvObjectList::getObjectScene(int objectNum) {
+ InvObject *obj = getItem(objectNum);
+ return obj->_sceneNumber;
+}
+
/*--------------------------------------------------------------------------*/
void EventHandler::dispatch() {
@@ -3781,7 +3794,7 @@ void SceneHandler::process(Event &event) {
if (i != _globals->_sceneItems.end()) {
// Pass the action to the item
- (*i)->startAction(_globals->_events.getCursor());
+ (*i)->startAction(_globals->_events.getCursor(), event);
event.handled = _globals->_events.getCursor() != CURSOR_WALK;
if (_globals->_player._uiEnabled && _globals->_player._canWalk &&
diff --git a/engines/tsage/core.h b/engines/tsage/core.h
index 5496087cc8..0ea9936b30 100644
--- a/engines/tsage/core.h
+++ b/engines/tsage/core.h
@@ -79,6 +79,8 @@ public:
InvObjectList();
int indexOf(InvObject *obj) const;
+ InvObject *getItem(int objectNum);
+ int getObjectScene(int objectNum);
virtual Common::String getClassName() { return "InvObjectList"; }
virtual void synchronize(Serializer &s);
@@ -413,7 +415,7 @@ public:
virtual Common::String getClassName() { return "SceneItem"; }
virtual void remove();
virtual void destroy() {}
- virtual void startAction(CursorType action) { doAction(action); }
+ virtual void startAction(CursorType action, Event &event) { doAction(action); }
virtual void doAction(int action);
bool contains(const Common::Point &pt);
@@ -820,6 +822,7 @@ public:
assert((idx >= 1) && (idx <= (int)_regionList.size()));
return _regionList[idx - 1];
}
+ void proc1(int v) { warning("TODO: WalkRegions::proc1"); }
};
/*--------------------------------------------------------------------------*/
diff --git a/engines/tsage/events.h b/engines/tsage/events.h
index ee77c6ff86..3680250ee9 100644
--- a/engines/tsage/events.h
+++ b/engines/tsage/events.h
@@ -68,7 +68,7 @@ enum CursorType {
INV_NONE = 0, INV_COLT45 = 1, INV_AMMO_CLIP = 2, INV_SPARE_CLIP = 3, INV_HANDCUFFS = 4,
INV_GREENS_GUN = 5, INV_TICKET_BOOK = 6, INV_MIRANDA_CARD = 7, INV_FOREST_RAP = 8,
INV_GREEN_ID = 9, INV_BASEBALL_CARD = 10, INV_BOOKING_GREEN = 11, INV_FLARE = 12,
- INV_COBB_RAPP = 13, INV_22_BULLET = 14, INV_AUTO_RIFLE = 15, INV_WIG = 16, INV_FRANKIE_ID = 17,
+ INV_COBB_RAP = 13, INV_22_BULLET = 14, INV_AUTO_RIFLE = 15, INV_WIG = 16, INV_FRANKIE_ID = 17,
INV_TYRONE_ID = 18, INV_22_SNUB = 19, INV_BOOKING_FRANKIE = 21, INV_BOOKING_GANG = 22,
INV_FBI_TELETYPE = 23, INV_DA_NOTE = 24, INV_PRINT_OUT = 25, INV_WHAREHOUSE_KEYS = 26,
INV_CENTER_PUNCH = 27, INV_TRANQ_GUN = 28, INV_HOOK = 29, INV_RAGS = 30, INV_JAR = 31,
diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp
index c1b42855da..050ad4994b 100644
--- a/engines/tsage/globals.cpp
+++ b/engines/tsage/globals.cpp
@@ -214,6 +214,7 @@ void BlueForceGlobals::reset() {
_v4CEA8 = 0;
_v4CF9E = 0;
_v4E238 = 0;
+ _v50696 = 0;
_v501FC = 0;
_v51C42 = 0;
_clip1Bullets = 8;
diff --git a/engines/tsage/globals.h b/engines/tsage/globals.h
index 314822546e..99388027d1 100644
--- a/engines/tsage/globals.h
+++ b/engines/tsage/globals.h
@@ -173,6 +173,7 @@ public:
int _driveToScene;
int _v4CF9E;
int _v4E238;
+ int _v50696;
int _v501FC;
int _v51C42;
int _v51C44;
@@ -180,6 +181,7 @@ public:
Bookmark _bookmark;
int _mapLocationId;
int _clip1Bullets, _clip2Bullets;
+ StripProxy _stripProxy;
BlueForceGlobals();
void reset();
diff --git a/engines/tsage/module.mk b/engines/tsage/module.mk
index ef715330f1..cd42b5b1d8 100644
--- a/engines/tsage/module.mk
+++ b/engines/tsage/module.mk
@@ -6,6 +6,7 @@ MODULE_OBJS := \
blue_force/blueforce_scenes0.o \
blue_force/blueforce_scenes1.o \
blue_force/blueforce_scenes3.o \
+ blue_force/blueforce_speakers.o \
blue_force/blueforce_ui.o \
converse.o \
core.o \
@@ -27,6 +28,7 @@ MODULE_OBJS := \
ringworld/ringworld_scenes6.o \
ringworld/ringworld_scenes8.o \
ringworld/ringworld_scenes10.o \
+ ringworld/ringworld_speakers.o \
saveload.o \
scenes.o \
sound.o \