Ticket #9186: 0001-add-support-for-BRA-s-part-command.patch

File 0001-add-support-for-BRA-s-part-command.patch, 3.0 KB (added by fuzzie, 14 years ago)
  • engines/parallaction/exec_br.cpp

    From 0ede3208ddc30e31e752f6ba48e69ff2310cf448 Mon Sep 17 00:00:00 2001
    From: Alyssa Milburn <fuzzie@fuzzie.org>
    Date: Fri, 21 May 2010 18:21:10 +0200
    Subject: [PATCH] add support for BRA's part command
    
    ---
     engines/parallaction/exec_br.cpp         |    2 +-
     engines/parallaction/parallaction.cpp    |    1 +
     engines/parallaction/parallaction.h      |    1 +
     engines/parallaction/parallaction_br.cpp |   21 +++++++++++++++++----
     4 files changed, 20 insertions(+), 5 deletions(-)
    
    diff --git a/engines/parallaction/exec_br.cpp b/engines/parallaction/exec_br.cpp
    index 45e4827..aaad180 100644
    a b DECLARE_COMMAND_OPCODE(text) {  
    293293
    294294
    295295DECLARE_COMMAND_OPCODE(part) {
    296         warning("Parallaction_br::cmdOp_part not yet implemented");
     296        _vm->_nextPart = ctxt._cmd->_counterValue;
    297297}
    298298
    299299
  • engines/parallaction/parallaction.cpp

    diff --git a/engines/parallaction/parallaction.cpp b/engines/parallaction/parallaction.cpp
    index ce75253..964880e 100644
    a b Common::Error Parallaction::init() {  
    116116        _location._followerStartPosition.y = -1000;
    117117        _location._followerStartFrame = 0;
    118118        _objects = 0;
     119        _nextPart = -1;
    119120
    120121        _screenSize = _screenWidth * _screenHeight;
    121122
  • engines/parallaction/parallaction.h

    diff --git a/engines/parallaction/parallaction.h b/engines/parallaction/parallaction.h
    index 151bfd9..b5cc84d 100644
    a b public:  
    323323        ZonePtr                 _zoneTrap;
    324324        ZonePtr                 _commentZone;
    325325        Common::String  _newLocationName;
     326        int                     _nextPart;
    326327
    327328protected:
    328329        void    runGame();
  • engines/parallaction/parallaction_br.cpp

    diff --git a/engines/parallaction/parallaction_br.cpp b/engines/parallaction/parallaction_br.cpp
    index e0fd89c..a0a90dc 100644
    a b void Parallaction_br::cleanupGame() {  
    260260        _globalFlagsNames = 0;
    261261        _objectsNames = 0;
    262262        _countersNames = 0;
     263
     264        memset(_zoneFlags, 0, sizeof(_zoneFlags));
    263265}
    264266
    265267
    void Parallaction_br::changeLocation() {  
    272274        strcpy(location, _newLocationName.c_str());
    273275
    274276        char *partStr = strrchr(location, '.');
    275         if (partStr) {
     277        if (partStr || _nextPart != -1) {
    276278                cleanupGame();
    277279
    278                 int n = partStr - location;
    279                 location[n] = '\0';
     280                // more cleanup needed for part changes (see also saveload)
     281                _globalFlags = 0;
     282                cleanInventory(true);
     283                strcpy(_characterName1, "null");
     284
     285                if (partStr) {
     286                        int n = partStr - location;
     287                        location[n] = '\0';
     288
     289                        _part = atoi(++partStr);
     290                } else {
     291                        _part = _nextPart;
     292                }
    280293
    281                 _part = atoi(++partStr);
    282294                if (getFeatures() & GF_DEMO) {
    283295                        assert(_part == 1);
    284296                } else {
    void Parallaction_br::changeLocation() {  
    358370
    359371        _engineFlags &= ~kEngineChangeLocation;
    360372        _newLocationName.clear();
     373        _nextPart = -1;
    361374}
    362375
    363376// FIXME: Parallaction_br::parseLocation() is now a verbatim copy of the same routine from Parallaction_ns.