aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sky/control.cpp17
-rw-r--r--sky/control.h1
-rw-r--r--sky/logic.cpp6
-rw-r--r--sky/sky.cpp3
-rw-r--r--sky/sky.h1
5 files changed, 25 insertions, 3 deletions
diff --git a/sky/control.cpp b/sky/control.cpp
index 6c8758355a..cf721989d2 100644
--- a/sky/control.cpp
+++ b/sky/control.cpp
@@ -556,7 +556,9 @@ uint16 SkyControl::handleClick(SkyConResource *pButton) {
return toggleFx(pButton);
case TOGGLE_MS:
- return 0;
+ animClick(pButton);
+ toggleMusic();
+ return TOGGLED;
case TOGGLE_TEXT:
animClick(pButton);
@@ -734,6 +736,19 @@ uint16 SkyControl::toggleText(void) {
return TOGGLED;
}
+void SkyControl::toggleMusic(void) {
+
+ if (SkyState::_systemVars.systemFlags & SF_MUS_OFF) {
+ SkyState::_systemVars.systemFlags &= ~SF_MUS_OFF;
+ _skyMusic->startMusic(SkyState::_systemVars.currentMusic);
+ _statusBar->setToText(0x7000 + 88);
+ } else {
+ SkyState::_systemVars.systemFlags |= SF_MUS_OFF;
+ _skyMusic->startMusic(0);
+ _statusBar->setToText(0x7000 + 89);
+ }
+}
+
uint16 SkyControl::shiftDown(uint8 speed) {
if (speed == SLOW) {
diff --git a/sky/control.h b/sky/control.h
index 944a67f492..cd26be244a 100644
--- a/sky/control.h
+++ b/sky/control.h
@@ -188,6 +188,7 @@ private:
uint16 doSpeedSlide(void);
uint16 toggleFx(SkyConResource *pButton);
uint16 toggleText(void);
+ void toggleMusic(void);
uint16 shiftDown(uint8 speed);
uint16 shiftUp(uint8 speed);
void drawTextCross(uint32 flags);
diff --git a/sky/logic.cpp b/sky/logic.cpp
index 8ab4d3fb0d..138207d8f5 100644
--- a/sky/logic.cpp
+++ b/sky/logic.cpp
@@ -2235,6 +2235,7 @@ bool SkyLogic::fnEnterSection(uint32 sectionNo, uint32 b, uint32 c) {
error("End of demo");
_scriptVariables[CUR_SECTION] = sectionNo;
+ SkyState::_systemVars.currentMusic = 0;
if (sectionNo == 5) //linc section - has different mouse icons
_skyMouse->replaceMouseCursors(60302);
@@ -2380,12 +2381,15 @@ bool SkyLogic::fnStopFx(uint32 a, uint32 b, uint32 c) {
}
bool SkyLogic::fnStartMusic(uint32 a, uint32 b, uint32 c) {
- _skyMusic->startMusic((uint16)a);
+ if (!(SkyState::_systemVars.systemFlags & SF_MUS_OFF))
+ _skyMusic->startMusic((uint16)a);
+ SkyState::_systemVars.currentMusic = (uint16)a;
return true;
}
bool SkyLogic::fnStopMusic(uint32 a, uint32 b, uint32 c) {
_skyMusic->startMusic(0);
+ SkyState::_systemVars.currentMusic = 0;
return true;
}
diff --git a/sky/sky.cpp b/sky/sky.cpp
index 988eef268a..049788de06 100644
--- a/sky/sky.cpp
+++ b/sky/sky.cpp
@@ -71,7 +71,7 @@ Engine *Engine_SKY_create(GameDetector *detector, OSystem *syst) {
void **SkyState::_itemList[300];
-SystemVars SkyState::_systemVars = {0, 0, 0, 0, 4316, 0, false, false };
+SystemVars SkyState::_systemVars = {0, 0, 0, 0, 4316, 0, 0, false, false };
SkyState::SkyState(GameDetector *detector, OSystem *syst)
: Engine(detector, syst) {
@@ -245,6 +245,7 @@ void SkyState::loadBase0(void) {
_skyLogic->fnEnterSection(0, 0, 0);
_skyMusic->startMusic(2);
+ _systemVars.currentMusic = 2;
}
void SkyState::loadFixedItems(void) {
diff --git a/sky/sky.h b/sky/sky.h
index e308cf0528..6f6eb32128 100644
--- a/sky/sky.h
+++ b/sky/sky.h
@@ -47,6 +47,7 @@ struct SystemVars {
uint16 language;
uint32 currentPalette;
uint16 gameSpeed;
+ uint16 currentMusic;
bool pastIntro;
bool quitting;
};