Ticket #9174: 0002-parse-play-music-from-BRA-hear-zones.patch

File 0002-parse-play-music-from-BRA-hear-zones.patch, 2.7 KB (added by fuzzie, 14 years ago)
  • engines/parallaction/parallaction.cpp

    From 85cba60644f993c4c555f87855cca1b2c983269b Mon Sep 17 00:00:00 2001
    From: Alyssa Milburn <fuzzie@fuzzie.org>
    Date: Tue, 18 May 2010 19:30:51 +0200
    Subject: [PATCH] parse+play music from BRA hear zones
    
    ---
     engines/parallaction/parallaction.cpp |   13 +++++++++----
     engines/parallaction/parser.h         |    1 +
     engines/parallaction/parser_br.cpp    |   16 ++++++++++++++++
     3 files changed, 26 insertions(+), 4 deletions(-)
    
    diff --git a/engines/parallaction/parallaction.cpp b/engines/parallaction/parallaction.cpp
    index f31b7ab..58fabea 100644
    a b void Parallaction::runZone(ZonePtr z) {  
    591591                break;
    592592
    593593        case kZoneHear:
    594                 _soundMan->execute(SC_SETSFXCHANNEL, z->u._hearChannel);
    595                 _soundMan->execute(SC_SETSFXLOOPING, (int)((z->_flags & kFlagsLooping) == kFlagsLooping));
    596                 _soundMan->execute(SC_SETSFXVOLUME, 60);
    597                 _soundMan->execute(SC_PLAYSFX, z->u._filename.c_str());
     594                if (z->u._hearChannel == -1) {
     595                        _soundMan->execute(SC_SETMUSICFILE, z->u._filename.c_str());
     596                        _soundMan->execute(SC_PLAYMUSIC);
     597                } else {
     598                        _soundMan->execute(SC_SETSFXCHANNEL, z->u._hearChannel);
     599                        _soundMan->execute(SC_SETSFXLOOPING, (int)((z->_flags & kFlagsLooping) == kFlagsLooping));
     600                        _soundMan->execute(SC_SETSFXVOLUME, 60);
     601                        _soundMan->execute(SC_PLAYSFX, z->u._filename.c_str());
     602                }
    598603                break;
    599604
    600605        case kZoneSpeak:
  • engines/parallaction/parser.h

    diff --git a/engines/parallaction/parser.h b/engines/parallaction/parser.h
    index 3672fd3..3e46e99 100644
    a b public:  
    293293        virtual void    parsePathData(ZonePtr z);
    294294        virtual void    parseGetData(ZonePtr z);
    295295        virtual void    parseDoorData(ZonePtr z);
     296        virtual void    parseHearData(ZonePtr z);
    296297protected:
    297298        void    parseAnswerCounter(Answer *answer);
    298299        virtual Answer *parseAnswer();
  • engines/parallaction/parser_br.cpp

    diff --git a/engines/parallaction/parser_br.cpp b/engines/parallaction/parser_br.cpp
    index 563faa1..1b21023 100644
    a b void LocationParser_br::parseDoorData(ZonePtr z) {  
    808808        }
    809809}
    810810
     811void LocationParser_br::parseHearData(ZonePtr z) {
     812        TypeData *data = &z->u;
     813        if (!scumm_stricmp(_tokens[0], "sound")) {
     814                assert(!data->_filename.size());
     815                data->_filename = _tokens[1];
     816                data->_hearChannel = atoi(_tokens[2]);
     817        } else
     818        if (!scumm_stricmp(_tokens[0], "freq")) {
     819                data->_hearFreq = atoi(_tokens[1]);
     820        } else
     821        if (!scumm_stricmp(_tokens[0], "music")) {
     822                assert(data->_hearChannel == -1);
     823                data->_filename = _tokens[1];
     824        }
     825}
     826
    811827typedef void (LocationParser_br::*ZoneTypeParser)(ZonePtr);
    812828static ZoneTypeParser parsers[] = {
    813829        0,      // no type