diff options
author | Paul Gilbert | 2011-09-08 20:41:10 +1000 |
---|---|---|
committer | Paul Gilbert | 2011-09-08 20:41:10 +1000 |
commit | 8b17e8a9b841bea6810c519143a7a3cd44521497 (patch) | |
tree | eb967c5e39a7ed179bc94197e101b879dfa3f9d3 | |
parent | 88e68abd4b0e2b8430395cc0ad87dac45ef974c6 (diff) | |
download | scummvm-rg350-8b17e8a9b841bea6810c519143a7a3cd44521497.tar.gz scummvm-rg350-8b17e8a9b841bea6810c519143a7a3cd44521497.tar.bz2 scummvm-rg350-8b17e8a9b841bea6810c519143a7a3cd44521497.zip |
TSAGE: More core functionality needed for Blue Force
-rw-r--r-- | engines/tsage/blue_force/blueforce_logic.cpp | 304 | ||||
-rw-r--r-- | engines/tsage/blue_force/blueforce_logic.h | 55 | ||||
-rw-r--r-- | engines/tsage/blue_force/blueforce_scenes1.cpp | 14 | ||||
-rw-r--r-- | engines/tsage/blue_force/blueforce_scenes1.h | 8 | ||||
-rw-r--r-- | engines/tsage/blue_force/blueforce_ui.cpp | 22 | ||||
-rw-r--r-- | engines/tsage/blue_force/blueforce_ui.h | 6 | ||||
-rw-r--r-- | engines/tsage/converse.cpp | 11 | ||||
-rw-r--r-- | engines/tsage/converse.h | 7 | ||||
-rw-r--r-- | engines/tsage/core.cpp | 15 | ||||
-rw-r--r-- | engines/tsage/core.h | 5 | ||||
-rw-r--r-- | engines/tsage/events.h | 2 | ||||
-rw-r--r-- | engines/tsage/globals.cpp | 1 | ||||
-rw-r--r-- | engines/tsage/globals.h | 2 | ||||
-rw-r--r-- | engines/tsage/module.mk | 2 |
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 \ |