[Scummvm-git-logs] scummvm branch-2-6 -> 248b2638f2ee056385b01de93e558ac23d7ef8c1
bluegr
noreply at scummvm.org
Mon Jun 13 22:53:22 UTC 2022
This automated email contains information about 22 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
8a113e5853 SCI: Disable ScummVM autosaves
abe7a3bc82 CHEWY: Finish TMF to MOD conversion
fcb2ecb571 CHEWY: Move TMF loading code to Stream subclass
94492e476d CHEWY: Mark German demo as unsupported
93341860f4 CHEWY: Fix music indices. Now, the correct music is played in each room
067fb13673 CHEWY: Hide cursor when showing the action menu - bug #13518
91f992d7c0 CHEWY: Play audio commentary in inventory - bug #13522
42b2ce0fad CHEWY: Properly restore the mouse cursor when selecting an action
a68456ff53 CHEWY: Remove unused menu flag
6629f89ee5 CHEWY: Properly play music during the title sequence
4fcc2349f0 CHEWY: Play action dialogs when subtitles are disabled
42b38251f3 CHEWY: Fixes for speech only mode
0ea8ca0622 CHEWY: Animate Chewy when performing an action when subs are disabled
87cde1a8e6 CHEWY: Rename spieler_vector -> moveState
e5b9c45011 CHEWY: Refactor room music code
9a0f81c17e CHEWY: Remove redundant globals
64eb1c50e5 CHEWY: Remove unused parameters
76559c0436 CHEWY: More fixes for speech only mode
8e5d44f8ee CHEWY: More fixes for dialog delays
a30eb710e7 CHEWY: Init intro and don't play Chewy's message if intro is skipped
8e749d04cf CHEWY: Small refactoring in the parameters of load_tgp()
248b2638f2 CHEWY: Don't wait forever for the music to end while playing videos
Commit: 8a113e5853e1f0e1154a7fbbb18b08a48c08bcce
https://github.com/scummvm/scummvm/commit/8a113e5853e1f0e1154a7fbbb18b08a48c08bcce
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2022-06-14T01:51:07+03:00
Commit Message:
SCI: Disable ScummVM autosaves
Changed paths:
engines/sci/metaengine.cpp
engines/sci/sci.h
diff --git a/engines/sci/metaengine.cpp b/engines/sci/metaengine.cpp
index bc5c84a6408..c6af60afe93 100644
--- a/engines/sci/metaengine.cpp
+++ b/engines/sci/metaengine.cpp
@@ -280,6 +280,8 @@ public:
int getMaximumSaveSlot() const override;
void removeSaveState(const char *target, int slot) const override;
SaveStateDescriptor querySaveMetaInfos(const char *target, int slot) const override;
+ // Disable autosave (see mirrored method in sci.h for detailed explanation)
+ int getAutosaveSlot() const override { return -1; }
// A fallback detection method. This is not ideal as all detection lives in MetaEngine, but
// here fb detection has many engine dependencies.
diff --git a/engines/sci/sci.h b/engines/sci/sci.h
index 42fa57acac8..fe89fed3d0f 100644
--- a/engines/sci/sci.h
+++ b/engines/sci/sci.h
@@ -153,6 +153,33 @@ public:
uint32 getTickCount();
void setTickCount(const uint32 ticks);
+ /**
+ * Disable support for ScummVM autosaves.
+ *
+ * A lot of SCI games already have an autosaving mechanism.
+ * Also, a lot of games have death screens when the player
+ * does something wrong, and autosaves could kick in when the
+ * death screen is shown, which makes them useless, since
+ * the player can only restore or restart.
+ *
+ * Another place where autosaves could kick in is during
+ * screens with internal loops, e.g. the inventory screen,
+ * where the autosave created would be invalid, as the internal
+ * loop isn't persisted in saved games.
+ *
+ * For now, we allow saving in places where the user has
+ * control via GuestAdditions::userHasControl(), but as
+ * mentioned above, these do not cover cases where the user
+ * does have control, but saving would either be useless (e.g.
+ * in death screens) or invalid saved would be created (e.g.
+ * while the inventory screen is open).
+ *
+ * In the future, if we are able to detect all death screens,
+ * all internal loops and generally all places where saving
+ * shouldn't be allowed, we could re-enable this feature.
+ */
+ int getAutosaveSlot() const override { return -1; }
+
const SciGameId &getGameId() const { return _gameId; }
const char *getGameIdStr() const;
Common::Language getLanguage() const;
Commit: abe7a3bc82f5a714e9deaea04639794419c634fb
https://github.com/scummvm/scummvm/commit/abe7a3bc82f5a714e9deaea04639794419c634fb
Author: Coen Rampen (crampen at gmail.com)
Date: 2022-06-14T01:52:18+03:00
Commit Message:
CHEWY: Finish TMF to MOD conversion
This finishes the conversion code of the TMF music format to standard MOD.
Changed paths:
engines/chewy/sound.cpp
engines/chewy/sound.h
diff --git a/engines/chewy/sound.cpp b/engines/chewy/sound.cpp
index bfc6e174634..382172ec329 100644
--- a/engines/chewy/sound.cpp
+++ b/engines/chewy/sound.cpp
@@ -32,6 +32,24 @@
namespace Chewy {
+const uint8 Sound::TMF_MOD_SONG_NAME[] = {
+ 'S', 'C', 'U', 'M', 'M',
+ 'V', 'M', ' ', 'M', 'O',
+ 'D', 'U', 'L', 'E', '\0',
+ '\0', '\0', '\0', '\0', '\0'};
+const uint8 Sound::TMF_MOD_INSTRUMENT_NAME[] = {
+ 'S', 'C', 'U', 'M', 'M',
+ 'V', 'M', ' ', 'I', 'N',
+ 'S', 'T', 'R', 'U', 'M',
+ 'E', 'N', 'T', '\0', '\0',
+ '\0', '\0'};
+// TODO Verify period values used by the game; this is an educated guess.
+const uint16 Sound::TMF_MOD_PERIODS[] = {
+ 856, 808, 762, 720, 678, 640, 604, 570, 538, 508, 480, 453,
+ 428, 404, 381, 360, 339, 320, 302, 285, 269, 254, 240, 226,
+ 214, 202, 190, 180, 170, 160, 151, 143, 135, 127, 120, 113
+};
+
Sound::Sound(Audio::Mixer *mixer) {
_mixer = mixer;
_speechRes = new SoundResource("speech.tvp");
@@ -114,30 +132,14 @@ void Sound::playMusic(int num, bool loop) {
}
void Sound::playMusic(uint8 *data, uint32 size, bool loop, DisposeAfterUse::Flag dispose) {
-#if 0
uint8 *modData = nullptr;
uint32 modSize;
- /*
- // TODO: Finish and use convertTMFToMod()
- warning("The current music playing implementation is wrong");
- modSize = size;
- modData = (uint8 *)MALLOC(modSize);
- memcpy(modData, data, size);
-
- Audio::AudioStream *stream = Audio::makeLoopingAudioStream(
- Audio::makeRawStream(modData,
- modSize, 22050, Audio::FLAG_UNSIGNED,
- dispose),
- loop ? 0 : 1);
- */
-
convertTMFToMod(data, size, modData, modSize);
Audio::AudioStream *stream = Audio::makeProtrackerStream(
- new Common::MemoryReadStream(data, size));
+ new Common::MemoryReadStream(modData, modSize));
_mixer->playStream(Audio::Mixer::kMusicSoundType, &_musicHandle, stream);
-#endif
}
void Sound::pauseMusic() {
@@ -213,58 +215,59 @@ void Sound::stopAll() {
_mixer->stopAll();
}
-void Sound::convertTMFToMod(uint8 *tmfData, uint32 tmfSize, uint8 *modData, uint32 &modSize) {
- const int maxInstruments = 31;
-
- modSize = tmfSize + 20 + maxInstruments * 22 + 4;
+void Sound::convertTMFToMod(uint8 *tmfData, uint32 tmfSize, uint8 *&modData, uint32 &modSize) {
+ // TMF fixed data is 4 + 14*31 + 130 + 4*31 = 692
+ // MOD fixed data is 20 + 30*31 + 134 = 1084
+ // Variable data size is the same, so size difference is 392 bytes.
+ modSize = tmfSize + 392;
modData = (uint8 *)MALLOC(modSize);
uint8 *tmfPtr = tmfData;
uint8 *modPtr = modData;
- const uint8 songName[20] = {
- 'S', 'C', 'U', 'M', 'M',
- 'V', 'M', ' ', 'M', 'O',
- 'D', 'U', 'L', 'E', '\0',
- '\0', '\0', '\0', '\0', '\0'
- };
- const uint8 instrumentName[22] = {
- 'S', 'C', 'U', 'M', 'M',
- 'V', 'M', ' ', 'I', 'N',
- 'S', 'T', 'R', 'U', 'M',
- 'E', 'N', 'T', '\0', '\0',
- '\0', '\0'
- };
-
+ // Check TMF fourCC.
if (READ_BE_UINT32(tmfPtr) != MKTAG('T', 'M', 'F', '\0'))
error("Corrupt TMF resource");
tmfPtr += 4;
- memcpy(modPtr, songName, 20);
+ // Write song name (not present in TMF data).
+ memcpy(modPtr, TMF_MOD_SONG_NAME, 20);
modPtr += 20;
+ // Copy instrument data.
uint8 fineTune, instVolume;
- uint16 repeatPoint, repeatLength, sampleLength;
+ uint32 repeatPoint, repeatLength, sampleLength;
+ uint32 totalSampleLength = 0;
- for (int i = 0; i < maxInstruments; i++) {
+ for (int i = 0; i < TMF_NUM_INSTRUMENTS; i++) {
fineTune = *tmfPtr++;
instVolume = *tmfPtr++;
- repeatPoint = READ_BE_UINT16(tmfPtr);
- tmfPtr += 2;
- repeatLength = READ_BE_UINT16(tmfPtr);
- tmfPtr += 2;
- sampleLength = READ_BE_UINT16(tmfPtr);
- tmfPtr += 2;
-
- memcpy(modPtr, instrumentName, 18);
+ // Repeat point, repeat length and sample length are 32 bit LE in bytes
+ // instead of 16 bit BE in words.
+ repeatPoint = READ_LE_UINT32(tmfPtr);
+ assert(repeatPoint <= 0x1FFFF && repeatPoint % 2 == 0);
+ tmfPtr += 4;
+ repeatLength = READ_LE_UINT32(tmfPtr);
+ assert(repeatLength <= 0x1FFFF && repeatLength % 2 == 0);
+ tmfPtr += 4;
+ // Sample length is at the end instead of at the start.
+ sampleLength = READ_LE_UINT32(tmfPtr);
+ assert(sampleLength <= 0x1FFFF && sampleLength % 2 == 0);
+ tmfPtr += 4;
+ totalSampleLength += sampleLength;
+
+ // Instrument name is not present in TMF data.
+ memcpy(modPtr, TMF_MOD_INSTRUMENT_NAME, 18);
modPtr += 18;
*modPtr++ = ' ';
- *modPtr++ = i / 10;
- *modPtr++ = i % 10;
+ *modPtr++ = '0' + i / 10;
+ *modPtr++ = '0' + i % 10;
*modPtr++ = '\0';
WRITE_BE_UINT16(modPtr, sampleLength / 2);
modPtr += 2;
- *modPtr++ = fineTune;
+ // Finetune is a signed nibble in MOD, but TMF uses a signed byte
+ // (within nibble range).
+ *modPtr++ = fineTune & 0x0F;
*modPtr++ = instVolume;
WRITE_BE_UINT16(modPtr, repeatPoint / 2);
modPtr += 2;
@@ -272,15 +275,58 @@ void Sound::convertTMFToMod(uint8 *tmfData, uint32 tmfSize, uint8 *modData, uint
modPtr += 2;
}
+ // Copy pattern table.
*modPtr++ = *tmfPtr++;
- *modPtr++ = *tmfPtr++;
+ // Second byte is the number of different patterns in TMF. This byte is
+ // unused in MOD (usually set to 0x7F).
+ uint8 numPatterns = *tmfPtr++;
+ *modPtr++ = 0x7F;
memcpy(modPtr, tmfPtr, 128);
modPtr += 128;
tmfPtr += 128;
+ // M.K. fourCC is not present in TMF.
WRITE_BE_UINT32(modPtr, MKTAG('M', '.', 'K', '.'));
modPtr += 4;
- // TODO: Finish this
+ // TMF has a 32 bit LE number for each instrument here; these are probably
+ // offsets for each sample. They are not present in MOD and not needed, so
+ // they are skipped.
+ tmfPtr += 4 * 31;
+
+ assert(modSize == 1084 + (numPatterns * 1024) + totalSampleLength);
+
+ // Copy pattern data.
+ uint32 channelDwords = numPatterns * 1024 / 4;
+ // TMF channel data has this format:
+ // 1 byte note (0-0x23 or 0x30 for "use previous value")
+ // 1 byte sample
+ // 2 bytes effect (byte 3 high nibble is unused)
+ for (uint32 i = 0; i < channelDwords; i++) {
+ byte note = *tmfPtr++;
+ assert(note == 0x30 || note < 36);
+ byte sample = *tmfPtr++;
+ uint16 effect = READ_BE_UINT16(tmfPtr);
+ assert((effect & 0xF000) == 0);
+ tmfPtr += 2;
+
+ // Note is converted to a MOD 12 bit period using a lookup array.
+ // Effect 12 bit value is used as-is.
+ // Sample is split into the period and effect high nibbles.
+ uint16 periodWord = (note == 0x30 ? 0 : TMF_MOD_PERIODS[note]) | ((sample & 0xF0) << 8);
+ uint16 effectWord = effect | ((sample & 0x0F) << 12);
+ WRITE_BE_UINT16(modPtr, periodWord);
+ modPtr += 2;
+ WRITE_BE_UINT16(modPtr, effectWord);
+ modPtr += 2;
+ }
+
+ // Copy sample data.
+ for (uint32 i = 0; i < totalSampleLength; i++) {
+ int sample = *tmfPtr++;
+ // Convert from unsigned to signed.
+ sample -= 0x80;
+ *modPtr++ = sample & 0xFF;
+ }
}
void Sound::waitForSpeechToFinish() {
diff --git a/engines/chewy/sound.h b/engines/chewy/sound.h
index 4bfccbf83e3..2f07cd7e246 100644
--- a/engines/chewy/sound.h
+++ b/engines/chewy/sound.h
@@ -33,6 +33,12 @@ class SoundResource;
#define MAX_SOUND_EFFECTS 14
class Sound {
+private:
+ static const int TMF_NUM_INSTRUMENTS = 31;
+ static const uint8 TMF_MOD_SONG_NAME[20];
+ static const uint8 TMF_MOD_INSTRUMENT_NAME[22];
+ static const uint16 TMF_MOD_PERIODS[36];
+
public:
Sound(Audio::Mixer *mixer);
virtual ~Sound();
@@ -91,7 +97,7 @@ private:
SoundResource *_speechRes;
SoundResource *_soundRes;
- void convertTMFToMod(uint8 *tmfData, uint32 tmfSize, uint8 *modData, uint32 &modSize);
+ void convertTMFToMod(uint8 *tmfData, uint32 tmfSize, uint8 *&modData, uint32 &modSize);
};
} // End of namespace Chewy
Commit: fcb2ecb571cd211c61b3577576e486ee3c2cc19e
https://github.com/scummvm/scummvm/commit/fcb2ecb571cd211c61b3577576e486ee3c2cc19e
Author: Coen Rampen (crampen at gmail.com)
Date: 2022-06-14T01:52:18+03:00
Commit Message:
CHEWY: Move TMF loading code to Stream subclass
This commit moves the TMF loading code to a dedicated ProtrackerStream
subclass. This replaces the inefficient parse TMF, convert to MOD, parse MOD
process with directly processing the TMF data. It also allows for setting the
correct stereo panning for the TMF channels.
Changed paths:
A engines/chewy/music/module_tmf.cpp
A engines/chewy/music/module_tmf.h
A engines/chewy/music/tmf_stream.cpp
A engines/chewy/music/tmf_stream.h
engines/chewy/module.mk
engines/chewy/sound.cpp
engines/chewy/sound.h
diff --git a/engines/chewy/module.mk b/engines/chewy/module.mk
index 6f92959647f..5656ba206c7 100644
--- a/engines/chewy/module.mk
+++ b/engines/chewy/module.mk
@@ -36,6 +36,8 @@ MODULE_OBJS = \
dialogs/inventory.o \
dialogs/main_menu.o \
dialogs/options.o \
+ music/module_tmf.o \
+ music/tmf_stream.o \
video/cfo_decoder.o \
video/video_player.o \
rooms/room00.o \
diff --git a/engines/chewy/music/module_tmf.cpp b/engines/chewy/music/module_tmf.cpp
new file mode 100644
index 00000000000..97547260bc1
--- /dev/null
+++ b/engines/chewy/music/module_tmf.cpp
@@ -0,0 +1,144 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "chewy/music/module_tmf.h"
+
+#include "common/array.h"
+#include "common/stream.h"
+
+const uint8 Chewy::Module_TMF::TMF_MOD_SONG_NAME[] = {
+ 'S', 'C', 'U', 'M', 'M',
+ 'V', 'M', ' ', 'M', 'O',
+ 'D', 'U', 'L', 'E', '\0',
+ '\0', '\0', '\0', '\0', '\0', '\0;'
+};
+const uint8 Chewy::Module_TMF::TMF_MOD_INSTRUMENT_NAME[] = {
+ 'S', 'C', 'U', 'M', 'M',
+ 'V', 'M', ' ', 'I', 'N',
+ 'S', 'T', 'R', 'U', 'M',
+ 'E', 'N', 'T', ' ', '\0',
+ '\0', '\0', '\0'
+};
+const uint16 Chewy::Module_TMF::TMF_MOD_PERIODS[] = {
+ 856, 808, 762, 720, 678, 640, 604, 570, 538, 508, 480, 453,
+ 428, 404, 381, 360, 339, 320, 302, 285, 269, 254, 240, 226,
+ 214, 202, 190, 180, 170, 160, 151, 143, 135, 127, 120, 113
+};
+
+bool Chewy::Module_TMF::load(Common::SeekableReadStream& stream, int offs) {
+ stream.seek(offs);
+
+ // Check TMF fourCC.
+ if (stream.readUint32BE() != MKTAG('T', 'M', 'F', '\0'))
+ error("Corrupt TMF resource");
+
+ // Write song name (not present in TMF data).
+ Common::copy(TMF_MOD_SONG_NAME, TMF_MOD_SONG_NAME + 21, songname);
+
+ // Copy instrument data.
+ uint8 fineTune, instVolume;
+ uint32 repeatPoint, repeatLength, sampleLength;
+ uint32 totalSampleLength = 0;
+
+ for (int i = 0; i < NUM_SAMPLES; ++i) {
+ fineTune = stream.readByte();
+ instVolume = stream.readByte();
+ // Repeat point, repeat length and sample length are 32 bit LE in bytes
+ // instead of 16 bit BE in words.
+ repeatPoint = stream.readUint32LE();
+ assert(repeatPoint <= 0x1FFFF && repeatPoint % 2 == 0);
+ repeatLength = stream.readUint32LE();
+ assert(repeatLength <= 0x1FFFF && repeatLength % 2 == 0);
+ // Sample length is at the end instead of at the start.
+ sampleLength = stream.readUint32LE();
+ assert(sampleLength <= 0x1FFFF && sampleLength % 2 == 0);
+ totalSampleLength += sampleLength;
+
+ // Instrument name is not present in TMF data.
+ Common::copy(TMF_MOD_INSTRUMENT_NAME, TMF_MOD_INSTRUMENT_NAME + 23, sample[i].name);
+ sample[i].name[19] = '0' + i / 10;
+ sample[i].name[20] = '0' + i % 10;
+
+ sample[i].len = sampleLength;
+ // Finetune is a signed nibble in MOD, but TMF uses a signed byte
+ // (within nibble range).
+ sample[i].finetune = fineTune & 0x0F;
+ sample[i].vol = instVolume;
+ sample[i].repeat = repeatPoint;
+ sample[i].replen = repeatLength;
+ }
+
+ // Copy pattern table.
+ songlen = stream.readByte();
+ // Second byte is the number of different patterns in TMF. This byte is
+ // unused in MOD (usually set to 0x7F).
+ uint8 numPatterns = stream.readByte();
+ undef = 0x7F;
+ stream.read(songpos, 128);
+ // M.K. fourCC is not present in TMF.
+ sig = signatures[0];
+
+ // TMF has a 32 bit LE number for each instrument here; these are probably
+ // offsets for each sample. They are not present in MOD and not needed, so
+ // they are skipped.
+ stream.skip(4 * 31);
+
+ // Copy pattern data.
+ pattern = new Modules::pattern_t[numPatterns];
+ for (int i = 0; i < numPatterns; ++i) {
+ for (int j = 0; j < 64; ++j) {
+ for (int k = 0; k < 4; ++k) {
+ // TMF channel data has this format:
+ // 1 byte note (0-0x23 or 0x30 for "use previous value")
+ // 1 byte sample
+ // 2 bytes effect (byte 3 high nibble is unused)
+ byte note = stream.readByte();
+ assert(note == 0x30 || note < 36);
+ byte sampleNum = stream.readByte();
+ uint16 effect = stream.readUint16BE();
+ assert((effect & 0xF000) == 0);
+ // Note is converted to a MOD 12 bit period using a lookup array.
+ uint16 period = note == 0x30 ? 0 : TMF_MOD_PERIODS[note];
+ pattern[i][j][k].sample = sampleNum;
+ pattern[i][j][k].period = period;
+ pattern[i][j][k].effect = effect;
+ pattern[i][j][k].note = periodToNote(period);
+ }
+ }
+ }
+
+ // Copy sample data.
+ for (int i = 0; i < NUM_SAMPLES; ++i) {
+ if (!sample[i].len) {
+ sample[i].data = nullptr;
+ } else {
+ sample[i].data = new int8[sample[i].len];
+ for (int j = 0; j < sample[i].len; j++) {
+ int tmfSample = stream.readByte();
+ // Convert from unsigned to signed.
+ tmfSample -= 0x80;
+ sample[i].data[j] = tmfSample & 0xFF;
+ }
+ }
+ }
+
+ return true;
+}
diff --git a/engines/chewy/music/module_tmf.h b/engines/chewy/music/module_tmf.h
new file mode 100644
index 00000000000..02e43c82b81
--- /dev/null
+++ b/engines/chewy/music/module_tmf.h
@@ -0,0 +1,42 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#ifndef CHEWY_MUSIC_MODULE_TMF_H
+#define CHEWY_MUSIC_MODULE_TMF_H
+
+#include "audio/mods/module.h"
+
+namespace Chewy {
+
+// Module variant for the MOD-like TMF format used by Chewy.
+class Module_TMF : public Modules::Module {
+protected:
+ static const uint8 TMF_MOD_SONG_NAME[21];
+ static const uint8 TMF_MOD_INSTRUMENT_NAME[23];
+ static const uint16 TMF_MOD_PERIODS[36];
+
+public:
+ bool load(Common::SeekableReadStream &stream, int offs) override;
+};
+
+} // End of namespace Chewy
+
+#endif
diff --git a/engines/chewy/music/tmf_stream.cpp b/engines/chewy/music/tmf_stream.cpp
new file mode 100644
index 00000000000..fcbfed95a4d
--- /dev/null
+++ b/engines/chewy/music/tmf_stream.cpp
@@ -0,0 +1,38 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "chewy/music/tmf_stream.h"
+
+#include "chewy/music/module_tmf.h"
+
+Chewy::TMFStream::TMFStream(Common::SeekableReadStream *stream, int offs) : ProtrackerStream(44100, true) {
+ _module = new Module_TMF();
+ bool result = _module->load(*stream, offs);
+ assert(result);
+
+ // Channel panning used by TMF is L-R-L-R instead of MOD's L-R-R-L.
+ setChannelPanning(0, PANNING_LEFT);
+ setChannelPanning(1, PANNING_RIGHT);
+ setChannelPanning(2, PANNING_LEFT);
+ setChannelPanning(3, PANNING_RIGHT);
+
+ startPaula();
+}
diff --git a/engines/chewy/music/tmf_stream.h b/engines/chewy/music/tmf_stream.h
new file mode 100644
index 00000000000..3d499a5e408
--- /dev/null
+++ b/engines/chewy/music/tmf_stream.h
@@ -0,0 +1,37 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#ifndef CHEWY_MUSIC_TMF_STREAM_H
+#define CHEWY_MUSIC_TMF_STREAM_H
+
+#include "audio/mods/protracker.h"
+
+namespace Chewy {
+
+// AudioStream for the MOD-like TMF music format used by Chewy.
+class TMFStream : public Modules::ProtrackerStream {
+public:
+ TMFStream(Common::SeekableReadStream *stream, int offs);
+};
+
+} // End of namespace Chewy
+
+#endif
diff --git a/engines/chewy/sound.cpp b/engines/chewy/sound.cpp
index 382172ec329..5c7b56b6714 100644
--- a/engines/chewy/sound.cpp
+++ b/engines/chewy/sound.cpp
@@ -29,6 +29,7 @@
#include "chewy/sound.h"
#include "chewy/types.h"
#include "chewy/globals.h"
+#include "chewy/music/tmf_stream.h"
namespace Chewy {
@@ -132,12 +133,7 @@ void Sound::playMusic(int num, bool loop) {
}
void Sound::playMusic(uint8 *data, uint32 size, bool loop, DisposeAfterUse::Flag dispose) {
- uint8 *modData = nullptr;
- uint32 modSize;
-
- convertTMFToMod(data, size, modData, modSize);
- Audio::AudioStream *stream = Audio::makeProtrackerStream(
- new Common::MemoryReadStream(modData, modSize));
+ TMFStream *stream = new TMFStream(new Common::MemoryReadStream(data, size), 0);
_mixer->playStream(Audio::Mixer::kMusicSoundType, &_musicHandle, stream);
}
@@ -215,120 +211,6 @@ void Sound::stopAll() {
_mixer->stopAll();
}
-void Sound::convertTMFToMod(uint8 *tmfData, uint32 tmfSize, uint8 *&modData, uint32 &modSize) {
- // TMF fixed data is 4 + 14*31 + 130 + 4*31 = 692
- // MOD fixed data is 20 + 30*31 + 134 = 1084
- // Variable data size is the same, so size difference is 392 bytes.
- modSize = tmfSize + 392;
- modData = (uint8 *)MALLOC(modSize);
- uint8 *tmfPtr = tmfData;
- uint8 *modPtr = modData;
-
- // Check TMF fourCC.
- if (READ_BE_UINT32(tmfPtr) != MKTAG('T', 'M', 'F', '\0'))
- error("Corrupt TMF resource");
- tmfPtr += 4;
-
- // Write song name (not present in TMF data).
- memcpy(modPtr, TMF_MOD_SONG_NAME, 20);
- modPtr += 20;
-
- // Copy instrument data.
- uint8 fineTune, instVolume;
- uint32 repeatPoint, repeatLength, sampleLength;
- uint32 totalSampleLength = 0;
-
- for (int i = 0; i < TMF_NUM_INSTRUMENTS; i++) {
- fineTune = *tmfPtr++;
- instVolume = *tmfPtr++;
- // Repeat point, repeat length and sample length are 32 bit LE in bytes
- // instead of 16 bit BE in words.
- repeatPoint = READ_LE_UINT32(tmfPtr);
- assert(repeatPoint <= 0x1FFFF && repeatPoint % 2 == 0);
- tmfPtr += 4;
- repeatLength = READ_LE_UINT32(tmfPtr);
- assert(repeatLength <= 0x1FFFF && repeatLength % 2 == 0);
- tmfPtr += 4;
- // Sample length is at the end instead of at the start.
- sampleLength = READ_LE_UINT32(tmfPtr);
- assert(sampleLength <= 0x1FFFF && sampleLength % 2 == 0);
- tmfPtr += 4;
- totalSampleLength += sampleLength;
-
- // Instrument name is not present in TMF data.
- memcpy(modPtr, TMF_MOD_INSTRUMENT_NAME, 18);
- modPtr += 18;
- *modPtr++ = ' ';
- *modPtr++ = '0' + i / 10;
- *modPtr++ = '0' + i % 10;
- *modPtr++ = '\0';
-
- WRITE_BE_UINT16(modPtr, sampleLength / 2);
- modPtr += 2;
- // Finetune is a signed nibble in MOD, but TMF uses a signed byte
- // (within nibble range).
- *modPtr++ = fineTune & 0x0F;
- *modPtr++ = instVolume;
- WRITE_BE_UINT16(modPtr, repeatPoint / 2);
- modPtr += 2;
- WRITE_BE_UINT16(modPtr, repeatLength / 2);
- modPtr += 2;
- }
-
- // Copy pattern table.
- *modPtr++ = *tmfPtr++;
- // Second byte is the number of different patterns in TMF. This byte is
- // unused in MOD (usually set to 0x7F).
- uint8 numPatterns = *tmfPtr++;
- *modPtr++ = 0x7F;
- memcpy(modPtr, tmfPtr, 128);
- modPtr += 128;
- tmfPtr += 128;
- // M.K. fourCC is not present in TMF.
- WRITE_BE_UINT32(modPtr, MKTAG('M', '.', 'K', '.'));
- modPtr += 4;
-
- // TMF has a 32 bit LE number for each instrument here; these are probably
- // offsets for each sample. They are not present in MOD and not needed, so
- // they are skipped.
- tmfPtr += 4 * 31;
-
- assert(modSize == 1084 + (numPatterns * 1024) + totalSampleLength);
-
- // Copy pattern data.
- uint32 channelDwords = numPatterns * 1024 / 4;
- // TMF channel data has this format:
- // 1 byte note (0-0x23 or 0x30 for "use previous value")
- // 1 byte sample
- // 2 bytes effect (byte 3 high nibble is unused)
- for (uint32 i = 0; i < channelDwords; i++) {
- byte note = *tmfPtr++;
- assert(note == 0x30 || note < 36);
- byte sample = *tmfPtr++;
- uint16 effect = READ_BE_UINT16(tmfPtr);
- assert((effect & 0xF000) == 0);
- tmfPtr += 2;
-
- // Note is converted to a MOD 12 bit period using a lookup array.
- // Effect 12 bit value is used as-is.
- // Sample is split into the period and effect high nibbles.
- uint16 periodWord = (note == 0x30 ? 0 : TMF_MOD_PERIODS[note]) | ((sample & 0xF0) << 8);
- uint16 effectWord = effect | ((sample & 0x0F) << 12);
- WRITE_BE_UINT16(modPtr, periodWord);
- modPtr += 2;
- WRITE_BE_UINT16(modPtr, effectWord);
- modPtr += 2;
- }
-
- // Copy sample data.
- for (uint32 i = 0; i < totalSampleLength; i++) {
- int sample = *tmfPtr++;
- // Convert from unsigned to signed.
- sample -= 0x80;
- *modPtr++ = sample & 0xFF;
- }
-}
-
void Sound::waitForSpeechToFinish() {
if (speechEnabled()) {
while (isSpeechActive() && !SHOULD_QUIT) {
diff --git a/engines/chewy/sound.h b/engines/chewy/sound.h
index 2f07cd7e246..c2246b2d0e5 100644
--- a/engines/chewy/sound.h
+++ b/engines/chewy/sound.h
@@ -96,8 +96,6 @@ private:
SoundResource *_speechRes;
SoundResource *_soundRes;
-
- void convertTMFToMod(uint8 *tmfData, uint32 tmfSize, uint8 *&modData, uint32 &modSize);
};
} // End of namespace Chewy
Commit: 94492e476d2adffe93066e3ccf1307926b23217a
https://github.com/scummvm/scummvm/commit/94492e476d2adffe93066e3ccf1307926b23217a
Author: Coen Rampen (crampen at gmail.com)
Date: 2022-06-14T01:52:19+03:00
Commit Message:
CHEWY: Mark German demo as unsupported
This version of the game currently crashes on load.
Changed paths:
engines/chewy/detection.cpp
diff --git a/engines/chewy/detection.cpp b/engines/chewy/detection.cpp
index c6453497edd..a6c12fe85de 100644
--- a/engines/chewy/detection.cpp
+++ b/engines/chewy/detection.cpp
@@ -98,7 +98,7 @@ static const ChewyGameDescription gameDescriptions[] = {
AD_ENTRY1s("txt/atds.tap", "c3be5641e90dd01274309b778cf8146d", 230686),
Common::DE_DEU,
Common::kPlatformDOS,
- ADGF_DEMO | ADGF_TESTING,
+ ADGF_DEMO | ADGF_UNSUPPORTED,
GUIO2(GUIO_NOMIDI, GAMEOPTION_ORIGINAL_SAVELOAD)
},
},
Commit: 93341860f4e33b2a0970fb22166d3111811ab8e8
https://github.com/scummvm/scummvm/commit/93341860f4e33b2a0970fb22166d3111811ab8e8
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2022-06-14T01:52:19+03:00
Commit Message:
CHEWY: Fix music indices. Now, the correct music is played in each room
Changed paths:
engines/chewy/m_event.cpp
diff --git a/engines/chewy/m_event.cpp b/engines/chewy/m_event.cpp
index d4fc6c8fc43..64d117dd689 100644
--- a/engines/chewy/m_event.cpp
+++ b/engines/chewy/m_event.cpp
@@ -30,164 +30,226 @@ namespace Chewy {
#define PATTERN_PLAY 2
void load_room_music(int16 room_nr) {
- int16 ttp_index = -1;
- int16 volume = _G(gameState).MusicVol;
- if (g_engine->_sound->musicEnabled()) {
- switch (room_nr) {
- case 0:
- ttp_index = 0;
- break;
-
- case 1:
- ttp_index = 0;
- volume -= 4;
- break;
-
- case 2:
- ttp_index = 0;
- volume -= 3;
- break;
-
- case 3:
- ttp_index = 0;
- volume -= 6;
- break;
-
- case 4:
- ttp_index = 0;
- volume -= 7;
- break;
-
- case 5:
- ttp_index = 0;
- volume -= 2;
- break;
-
- case 6:
- ttp_index = 1;
- volume -= 5;
- break;
-
- case 7:
- ttp_index = 0;
- volume -= 1;
- break;
-
- case 8:
- ttp_index = 0;
- break;
-
- case 9:
- ttp_index = 0;
- break;
-
- case 10:
- ttp_index = 0;
- break;
-
- case 11:
- ttp_index = 1;
- break;
-
- case 12:
- ttp_index = 0;
- break;
-
- case 13:
- ttp_index = 0;
- break;
-
- case 14:
- ttp_index = 0;
- break;
-
- case 15:
- ttp_index = 0;
- break;
-
- case 16:
- ttp_index = 1;
- break;
- case 18:
- ttp_index = 3;
- break;
-
- case 21:
- ttp_index = 2;
- break;
-
- case 22:
- ttp_index = 0;
- break;
-
- case 25:
- case 26:
- ttp_index = 13;
- break;
-
- case 32:
- ttp_index = 8;
- volume -= 20;
- break;
-
- case 27:
- case 28:
- case 29:
- case 30:
- case 31:
- case 33:
- case 35:
- case 39:
- ttp_index = 11;
- volume -= 10;
- break;
-
- case 37:
- ttp_index = 10;
- volume -= 10;
- break;
-
- case 40:
- ttp_index = 14;
- volume -= 10;
- break;
-
- case 41:
- ttp_index = 9;
- volume -= 10;
- break;
-
- case 42:
- ttp_index = 8;
- volume -= 10;
- break;
-
- case 255:
- ttp_index = 7;
- break;
-
- case 256:
- ttp_index = 12;
- break;
+ int16 musicIndex = -1;
+ if (!g_engine->_sound->musicEnabled())
+ return;
+
+ switch (room_nr) {
+ case 0:
+ musicIndex = 13;
+ break;
+ case 1:
+ case 18:
+ case 90:
+ musicIndex = 17;
+ break;
+ case 2:
+ case 88:
+ musicIndex = 43;
+ break;
+ case 3:
+ case 4:
+ musicIndex = 0;
+ break;
+ case 5:
+ case 8:
+ case 12:
+ case 86:
+ musicIndex = 14;
+ break;
+ case 6:
+ musicIndex = 1;
+ break;
+ case 7:
+ case 97:
+ musicIndex = 18;
+ break;
+ case 9:
+ case 10:
+ case 47:
+ case 87:
+ musicIndex = 20;
+ break;
+ case 11:
+ musicIndex = 19;
+ break;
+ case 13:
+ musicIndex = -1;
+ break;
+ case 14:
+ musicIndex = 19;
+ break;
+ case 15:
+ case 16:
+ case 19:
+ case 96:
+ musicIndex = 16;
+ break;
+ case 21:
+ musicIndex = 2;
+ break;
+ case 22:
+ musicIndex = 48;
+ break;
+ case 25:
+ case 26:
+ musicIndex = 11;
+ break;
+ case 27:
+ case 30:
+ case 54:
+ case 63:
+ musicIndex = 33;
+ break;
+ case 28:
+ case 29:
+ musicIndex = 47;
+ break;
+ case 31:
+ case 35:
+ musicIndex = 9;
+ break;
+ case 32:
+ case 40:
+ case 71:
+ case 89:
+ case 92:
+ musicIndex = 38;
+ break;
+ case 33:
+ musicIndex = 35;
+ break;
+ case 37:
+ musicIndex = 8;
+ break;
+ case 39:
+ musicIndex = 9;
+ break;
+ case 41:
+ case 77:
+ case 78:
+ case 83:
+ case 93:
+ musicIndex = -1;
+ break;
+ case 42:
+ musicIndex = 41;
+ break;
+ case 45:
+ musicIndex = 44;
+ break;
+ case 46:
+ case 50:
+ case 73:
+ case 74:
+ musicIndex = 21;
+ break;
+ case 48:
+ musicIndex = 22;
+ break;
+ case 49:
+ musicIndex = 3;
+ break;
+ case 51:
+ case 52:
+ musicIndex = 27;
+ break;
+ case 53:
+ musicIndex = 26;
+ break;
+ case 55:
+ case 57:
+ musicIndex = 23;
+ break;
+ case 56:
+ // TODO: Extra checks for two flags
+ //if ( (spieler.flags32 & SpielerFlags32_10) != 0 && spieler.flags33 >= 0 ) {
+ musicIndex = 52;
+ //} else {
+ // musicIndex = 7;
+ //}
+ break;
+ case 62:
+ musicIndex = 25;
+ break;
+ case 64:
+ musicIndex = 51;
+ break;
+ case 66:
+ case 68:
+ musicIndex = 34;
+ break;
+ case 67:
+ case 69:
+ case 70:
+ case 75:
+ musicIndex = 28;
+ break;
+ case 72:
+ musicIndex = 31;
+ break;
+ case 76:
+ musicIndex = 46;
+ break;
+ case 79:
+ musicIndex = 6;
+ break;
+ case 80:
+ musicIndex = 29;
+ break;
+ case 81:
+ musicIndex = 45;
+ break;
+ case 82:
+ musicIndex = 50;
+ break;
+ case 84:
+ musicIndex = 24;
+ break;
+ case 85:
+ musicIndex = 32;
+ break;
+ case 91:
+ musicIndex = 36;
+ break;
+ case 94:
+ case 95:
+ musicIndex = 40;
+ break;
+ case 98:
+ musicIndex = 4;
+ break;
+ case 255:
+ musicIndex = 5;
+ break;
+ case 256:
+ musicIndex = 10;
+ break;
+ case 257:
+ musicIndex = 52;
+ break;
+ case 258:
+ musicIndex = 53;
+ break;
+ case 259:
+ musicIndex = 54;
+ break;
+ case 260:
+ musicIndex = 24;
+ break;
+ default:
+ musicIndex = -1;
+ _G(currentSong) = -1;
+ g_engine->_sound->stopMusic();
+ break;
+ }
- default:
- ttp_index = -1;
- _G(currentSong) = -1;
- g_engine->_sound->stopMusic();
- break;
- }
- if (ttp_index != -1) {
- if (volume < 0)
- volume = 0;
- else if (volume > _G(gameState).MusicVol)
- volume = _G(gameState).MusicVol;
- g_engine->_sound->setMusicVolume(volume * Audio::Mixer::kMaxChannelVolume / 120);
- if (ttp_index != _G(currentSong)) {
- g_engine->_sound->stopMusic();
- _G(currentSong) = ttp_index;
- g_engine->_sound->playMusic(ttp_index, true);
- }
- }
+ // The original changed the volume here,
+ // but we try to maintain a stable volume
+ if (musicIndex != _G(currentSong)) {
+ g_engine->_sound->stopMusic();
+ _G(currentSong) = musicIndex;
+ g_engine->_sound->playMusic(musicIndex, true);
}
}
Commit: 067fb13673351eae10db5f2de161c2b2fc4903b5
https://github.com/scummvm/scummvm/commit/067fb13673351eae10db5f2de161c2b2fc4903b5
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2022-06-14T01:52:19+03:00
Commit Message:
CHEWY: Hide cursor when showing the action menu - bug #13518
Changed paths:
engines/chewy/main.cpp
diff --git a/engines/chewy/main.cpp b/engines/chewy/main.cpp
index 22d759253ba..fa43ccd8274 100644
--- a/engines/chewy/main.cpp
+++ b/engines/chewy/main.cpp
@@ -246,6 +246,7 @@ bool mainLoop(int16 mode) {
_G(maus_old_y) = g_events->_mousePos.y;
_G(menu_item) = CUR_USE;
menuEntry();
+ _G(cur)->show_cur();
Dialogs::Inventory::menu();
menuExit();
_G(menu_flag) = MENU_HIDE;
@@ -288,6 +289,7 @@ bool mainLoop(int16 mode) {
case Common::KEYCODE_ESCAPE:
if (_G(menu_display) == 0) {
menuEntry();
+ _G(cur)->hide_cur();
_G(tmp_menu_item) = _G(menu_item);
_G(maus_old_x) = g_events->_mousePos.x;
_G(maus_old_y) = g_events->_mousePos.y;
@@ -296,6 +298,7 @@ bool mainLoop(int16 mode) {
_G(cur)->move((MOUSE_MENU_MAX_X / 5) * (_G(menu_item)), 100);
} else {
menuExit();
+ _G(cur)->show_cur();
_G(menu_item) = _G(tmp_menu_item);
_G(menu_display) = MENU_HIDE;
if (_G(gameState).inv_cur && _G(gameState).AkInvent != -1 && _G(menu_item) == CUR_USE) {
@@ -311,6 +314,7 @@ bool mainLoop(int16 mode) {
_G(menu_item) = CUR_USE;
menuEntry();
+ _G(cur)->show_cur();
Dialogs::Inventory::menu();
menuExit();
_G(menu_flag) = MENU_HIDE;
Commit: 91f992d7c0ab5aab332fc17516f8bc5565eb6f7e
https://github.com/scummvm/scummvm/commit/91f992d7c0ab5aab332fc17516f8bc5565eb6f7e
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2022-06-14T01:52:20+03:00
Commit Message:
CHEWY: Play audio commentary in inventory - bug #13522
Changed paths:
engines/chewy/atds.h
engines/chewy/dialogs/inventory.cpp
diff --git a/engines/chewy/atds.h b/engines/chewy/atds.h
index 89fdba35c60..0a260215ea0 100644
--- a/engines/chewy/atds.h
+++ b/engines/chewy/atds.h
@@ -25,6 +25,7 @@
#include "common/str.h"
#include "common/str-array.h"
#include "chewy/resource.h"
+#include "chewy/text.h"
namespace Chewy {
@@ -274,6 +275,7 @@ public:
Common::StringArray getTextArray(uint dialogNum, uint entryNum, int type, int subEntry = -1);
Common::String getTextEntry(uint dialogNum, uint entryNum, int type, int subEntry = -1);
+ int16 getLastSpeechId() { return _text->getLastSpeechId(); }
private:
void init();
diff --git a/engines/chewy/dialogs/inventory.cpp b/engines/chewy/dialogs/inventory.cpp
index 51b26b88d26..86360c210da 100644
--- a/engines/chewy/dialogs/inventory.cpp
+++ b/engines/chewy/dialogs/inventory.cpp
@@ -28,6 +28,7 @@
#include "chewy/main.h"
#include "chewy/menus.h"
#include "chewy/mouse.h"
+#include "chewy/sound.h"
namespace Chewy {
namespace Dialogs {
@@ -383,6 +384,7 @@ int16 Inventory::look(int16 invent_nr, int16 mode, int16 ats_nr) {
bool endLoop = false;
int16 startLine = 0;
bool mouseFl = true;
+ bool firstTime = true;
if (mode == INV_ATS_MODE) {
itemName = _G(atds)->getTextEntry(invent_nr, TXT_MARK_NAME, INV_ATS_DATA);
@@ -409,6 +411,8 @@ int16 Inventory::look(int16 invent_nr, int16 mode, int16 ats_nr) {
endLoop = true;
}
+ const int16 speechId = _G(atds)->getLastSpeechId();
+
while (!endLoop) {
int16 rect = _G(in)->findHotspot(_G(inventoryHotspots));
@@ -518,6 +522,11 @@ int16 Inventory::look(int16 invent_nr, int16 mode, int16 ats_nr) {
_G(scr_width), itemDesc[i].c_str());
++k;
}
+
+ if (g_engine->_sound->speechEnabled() && speechId >= 0 && firstTime) {
+ g_engine->_sound->playSpeech(speechId, false);
+ firstTime = false;
+ }
}
_G(cur)->plot_cur();
Commit: 42b2ce0fada2d74513d220f69ac7aae605f18e7a
https://github.com/scummvm/scummvm/commit/42b2ce0fada2d74513d220f69ac7aae605f18e7a
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2022-06-14T01:52:20+03:00
Commit Message:
CHEWY: Properly restore the mouse cursor when selecting an action
A regression from c0fbc05b2af41c7c6490b3ad034e8b4971c4a8a7
Changed paths:
engines/chewy/main.cpp
diff --git a/engines/chewy/main.cpp b/engines/chewy/main.cpp
index fa43ccd8274..82481a67c71 100644
--- a/engines/chewy/main.cpp
+++ b/engines/chewy/main.cpp
@@ -365,6 +365,7 @@ bool mainLoop(int16 mode) {
default:
if (_G(menu_display) != 0) {
menuExit();
+ _G(cur)->show_cur();
_G(menu_flag) = MENU_HIDE;
_G(menu_display) = 0;
_G(cur_display) = true;
Commit: a68456ff5325bc1c5125d08b0308221b5da3245c
https://github.com/scummvm/scummvm/commit/a68456ff5325bc1c5125d08b0308221b5da3245c
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2022-06-14T01:52:20+03:00
Commit Message:
CHEWY: Remove unused menu flag
Changed paths:
engines/chewy/dialogs/main_menu.cpp
engines/chewy/globals.h
engines/chewy/main.cpp
diff --git a/engines/chewy/dialogs/main_menu.cpp b/engines/chewy/dialogs/main_menu.cpp
index 8dd26270a17..8f983e3f431 100644
--- a/engines/chewy/dialogs/main_menu.cpp
+++ b/engines/chewy/dialogs/main_menu.cpp
@@ -162,7 +162,6 @@ void MainMenu::animate() {
calcMouseText(g_events->_mousePos.x, g_events->_mousePos.y, 1);
_G(cur)->plot_cur();
_G(mouseLeftClick) = false;
- _G(menu_flag) = 0;
_G(out)->setPointer(nullptr);
_G(out)->copyToScreen();
diff --git a/engines/chewy/globals.h b/engines/chewy/globals.h
index 2c53c2d901e..260b36e1aac 100644
--- a/engines/chewy/globals.h
+++ b/engines/chewy/globals.h
@@ -227,7 +227,6 @@ public:
};
// main.cpp
- int16 _menu_flag = 0;
bool _inv_disp_ok = 0;
int16 _txt_aus_click = 0;
int16 _txt_nummer = 0;
diff --git a/engines/chewy/main.cpp b/engines/chewy/main.cpp
index 82481a67c71..0d20cff0551 100644
--- a/engines/chewy/main.cpp
+++ b/engines/chewy/main.cpp
@@ -249,7 +249,6 @@ bool mainLoop(int16 mode) {
_G(cur)->show_cur();
Dialogs::Inventory::menu();
menuExit();
- _G(menu_flag) = MENU_HIDE;
_G(menu_display) = 0;
_G(cur_display) = true;
if (_G(gameState).AkInvent == -1) {
@@ -317,7 +316,6 @@ bool mainLoop(int16 mode) {
_G(cur)->show_cur();
Dialogs::Inventory::menu();
menuExit();
- _G(menu_flag) = MENU_HIDE;
_G(menu_display) = 0;
_G(cur_display) = true;
if (_G(gameState).AkInvent == -1) {
@@ -366,7 +364,6 @@ bool mainLoop(int16 mode) {
if (_G(menu_display) != 0) {
menuExit();
_G(cur)->show_cur();
- _G(menu_flag) = MENU_HIDE;
_G(menu_display) = 0;
_G(cur_display) = true;
_G(cur)->move(_G(maus_old_x), _G(maus_old_y));
@@ -405,7 +402,6 @@ bool mainLoop(int16 mode) {
if (_G(menu_display) == MENU_HIDE) {
menuExit();
- _G(menu_flag) = MENU_HIDE;
_G(menu_display) = 0;
_G(cur_display) = true;
_G(cur)->move(_G(maus_old_x), _G(maus_old_y));
@@ -577,7 +573,6 @@ void setupScreen(SetupScreenMode mode) {
_G(atds)->print_ats(_G(spieler_vector)[P_CHEWY].Xypos[0] + CH_HOT_X,
_G(spieler_vector)[P_CHEWY].Xypos[1], _G(gameState).scrollx, _G(gameState).scrolly);
_G(mouseLeftClick) = false;
- _G(menu_flag) = false;
if (mode == DO_SETUP) {
_G(out)->setPointer(nullptr);
switch (_G(fx_blend)) {
@@ -1579,7 +1574,6 @@ void get_user_key(int16 mode) {
_G(tmp_menu_item) = _G(menu_item);
_G(menu_item) = CUR_USE;
Dialogs::Inventory::menu();
- _G(menu_flag) = MENU_HIDE;
_G(menu_display) = 0;
_G(cur_display) = true;
if (_G(gameState).AkInvent == -1) {
Commit: 6629f89ee5f094d4f0122be458a3485b7df70e89
https://github.com/scummvm/scummvm/commit/6629f89ee5f094d4f0122be458a3485b7df70e89
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2022-06-14T01:52:20+03:00
Commit Message:
CHEWY: Properly play music during the title sequence
Changed paths:
engines/chewy/r_event.cpp
diff --git a/engines/chewy/r_event.cpp b/engines/chewy/r_event.cpp
index d92f77ec5ea..a1d31eaa03b 100644
--- a/engines/chewy/r_event.cpp
+++ b/engines/chewy/r_event.cpp
@@ -776,6 +776,11 @@ void flic_cut(int16 nr) {
playIntroSequence();
break;
+ case FCUT_155:
+ case FCUT_160:
+ g_engine->_video->playVideo(nr, false);
+ break;
+
default:
g_engine->_video->playVideo(nr);
break;
Commit: 4fcc2349f096c4699c1a17ff10ee0b3731ec9c11
https://github.com/scummvm/scummvm/commit/4fcc2349f096c4699c1a17ff10ee0b3731ec9c11
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2022-06-14T01:52:21+03:00
Commit Message:
CHEWY: Play action dialogs when subtitles are disabled
We're still missing the screen update, so Chewy is not animating yet
Changed paths:
engines/chewy/sprite.cpp
diff --git a/engines/chewy/sprite.cpp b/engines/chewy/sprite.cpp
index cb2cedfa38b..47e84a514da 100644
--- a/engines/chewy/sprite.cpp
+++ b/engines/chewy/sprite.cpp
@@ -497,15 +497,15 @@ bool startAtsWait(int16 txtNr, int16 txtMode, int16 col, int16 mode) {
if (_G(menu_item) != CUR_WALK)
atdsStringStart(30000, 0, 0, AAD_STR_START);
- int16 VocNr;
- shown = _G(atds)->start_ats(txtNr, txtMode, col, mode, &VocNr);
+ int16 vocNr;
+ shown = _G(atds)->start_ats(txtNr, txtMode, col, mode, &vocNr);
- if (shown && g_engine->_sound->speechEnabled()) {
+ if (g_engine->_sound->speechEnabled()) {
const int16 vocx = _G(spieler_vector)[P_CHEWY].Xypos[0] - _G(gameState).scrollx + _G(spieler_mi)[P_CHEWY].HotX;
g_engine->_sound->setSoundChannelBalance(0, _G(atds)->getStereoPos(vocx));
- if (VocNr >= 0) {
- g_engine->_sound->playSpeech(VocNr, !g_engine->_sound->subtitlesEnabled());
+ if (vocNr >= 0) {
+ g_engine->_sound->playSpeech(vocNr, false);
}
setupScreen(DO_SETUP);
Commit: 42b38251f31cf450fd589a9e01481eaba0e7f255
https://github.com/scummvm/scummvm/commit/42b38251f31cf450fd589a9e01481eaba0e7f255
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2022-06-14T01:52:21+03:00
Commit Message:
CHEWY: Fixes for speech only mode
Changed paths:
engines/chewy/atds.cpp
diff --git a/engines/chewy/atds.cpp b/engines/chewy/atds.cpp
index 157ce75c4c7..8a1162d92ad 100644
--- a/engines/chewy/atds.cpp
+++ b/engines/chewy/atds.cpp
@@ -420,10 +420,6 @@ bool Atdsys::start_ats(int16 txtNr, int16 txtMode, int16 color, int16 mode, int1
_atsv._color = color;
_printDelayCount1 = _atsv._delayCount / 10;
_mousePush = true;
-
- if (*vocNr == -1) {
- _atsv.shown = g_engine->_sound->subtitlesEnabled();
- }
}
return _atsv.shown;
@@ -647,10 +643,10 @@ void Atdsys::print_aad(int16 scrX, int16 scrY) {
SplitStringRet splitString;
split_string(&tmp_ssi, &splitString);
- if (g_engine->_sound->subtitlesEnabled() ||
- (_aadv._strHeader->_vocNr - ATDS_VOC_OFFSET) == -1) {
- const int16 h = _G(fontMgr)->getFont()->getDataHeight();
- for (int16 i = 0; i < splitString._nr; i++) {
+ const int16 h = _G(fontMgr)->getFont()->getDataHeight();
+ for (int16 i = 0; i < splitString._nr; i++) {
+ if (g_engine->_sound->subtitlesEnabled() ||
+ _aadv._strHeader->_vocNr - ATDS_VOC_OFFSET == -1) {
_G(out)->printxy(splitString._x[i] + 1,
splitString._y + (i * h),
0, 300, 0, splitString._strPtr[i]);
@@ -665,38 +661,26 @@ void Atdsys::print_aad(int16 scrX, int16 scrY) {
0, 300, 0, splitString._strPtr[i]);
_G(out)->printxy(splitString._x[i],
splitString._y + (i * h),
- _aadv._person[personId]._color,
+ _aadv._person[personId]._color,
300, 0, splitString._strPtr[i]);
- tmp_ptr += strlen(splitString._strPtr[i]) + 1;
}
- str_null2leer(start_ptr, start_ptr + txt_len - 1);
-
+ tmp_ptr += strlen(splitString._strPtr[i]) + 1;
}
+ str_null2leer(start_ptr, start_ptr + txt_len - 1);
if (g_engine->_sound->speechEnabled() &&
- (_aadv._strHeader->_vocNr - ATDS_VOC_OFFSET) != -1) {
+ _aadv._strHeader->_vocNr - ATDS_VOC_OFFSET != -1) {
if (_atdsv._vocNr != _aadv._strHeader->_vocNr - ATDS_VOC_OFFSET) {
_atdsv._vocNr = _aadv._strHeader->_vocNr - ATDS_VOC_OFFSET;
- g_engine->_sound->playSpeech(_atdsv._vocNr, !g_engine->_sound->subtitlesEnabled());
+ g_engine->_sound->playSpeech(_atdsv._vocNr, false);
int16 vocx = _G(spieler_vector)[personId].Xypos[0] -
_G(gameState).scrollx + _G(spieler_mi)[personId].HotX;
g_engine->_sound->setSoundChannelBalance(0, getStereoPos(vocx));
if (!g_engine->_sound->subtitlesEnabled()) {
_aadv._strNr = -1;
- _aadv._delayCount = 1;
}
}
-
- // FIXME: This breaks subtitles, as it removes
- // all string terminators. This was previously
- // used when either speech or subtitles (but not
- // both) were selected, but its logic is broken.
- // Check if it should be removed altogether.
- /*for (int16 i = 0; i < splitString._nr; i++) {
- tmp_ptr += strlen(splitString._strPtr[i]) + 1;
- }
- str_null2leer(start_ptr, start_ptr + txt_len - 1);*/
}
if (_aadv._delayCount <= 0) {
@@ -733,13 +717,8 @@ void Atdsys::print_aad(int16 scrX, int16 scrY) {
_aadv._silentCount = _atdsv._silent;
}
} else {
- if (g_engine->_sound->subtitlesEnabled() ||
- (_aadv._strHeader->_vocNr - ATDS_VOC_OFFSET) == -1)
+ if (_aadv._strHeader->_vocNr - ATDS_VOC_OFFSET == -1)
--_aadv._delayCount;
-
- else if (!g_engine->_sound->subtitlesEnabled()) {
- _aadv._delayCount = 0;
- }
}
} else {
--_aadv._silentCount;
Commit: 0ea8ca06224524a568c09bf5a03e7dbd1e8a9d7d
https://github.com/scummvm/scummvm/commit/0ea8ca06224524a568c09bf5a03e7dbd1e8a9d7d
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2022-06-14T01:52:21+03:00
Commit Message:
CHEWY: Animate Chewy when performing an action when subs are disabled
Changed paths:
engines/chewy/sprite.cpp
diff --git a/engines/chewy/sprite.cpp b/engines/chewy/sprite.cpp
index 47e84a514da..309175fb609 100644
--- a/engines/chewy/sprite.cpp
+++ b/engines/chewy/sprite.cpp
@@ -505,7 +505,7 @@ bool startAtsWait(int16 txtNr, int16 txtMode, int16 col, int16 mode) {
g_engine->_sound->setSoundChannelBalance(0, _G(atds)->getStereoPos(vocx));
if (vocNr >= 0) {
- g_engine->_sound->playSpeech(vocNr, false);
+ g_engine->_sound->playSpeech(vocNr, !g_engine->_sound->subtitlesEnabled());
}
setupScreen(DO_SETUP);
Commit: 87cde1a8e68a844f212543c6d7411d1c73b28f55
https://github.com/scummvm/scummvm/commit/87cde1a8e68a844f212543c6d7411d1c73b28f55
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2022-06-14T01:52:22+03:00
Commit Message:
CHEWY: Rename spieler_vector -> moveState
Changed paths:
engines/chewy/atds.cpp
engines/chewy/chewy.cpp
engines/chewy/dialogs/main_menu.cpp
engines/chewy/globals.h
engines/chewy/main.cpp
engines/chewy/r_event.cpp
engines/chewy/room.cpp
engines/chewy/rooms/room00.cpp
engines/chewy/rooms/room04.cpp
engines/chewy/rooms/room09.cpp
engines/chewy/rooms/room13.cpp
engines/chewy/rooms/room18.cpp
engines/chewy/rooms/room21.cpp
engines/chewy/rooms/room28.cpp
engines/chewy/rooms/room40.cpp
engines/chewy/rooms/room41.cpp
engines/chewy/rooms/room45.cpp
engines/chewy/rooms/room46.cpp
engines/chewy/rooms/room49.cpp
engines/chewy/rooms/room50.cpp
engines/chewy/rooms/room51.cpp
engines/chewy/rooms/room52.cpp
engines/chewy/rooms/room54.cpp
engines/chewy/rooms/room55.cpp
engines/chewy/rooms/room56.cpp
engines/chewy/rooms/room57.cpp
engines/chewy/rooms/room58.cpp
engines/chewy/rooms/room65.cpp
engines/chewy/rooms/room66.cpp
engines/chewy/rooms/room67.cpp
engines/chewy/rooms/room68.cpp
engines/chewy/rooms/room71.cpp
engines/chewy/rooms/room79.cpp
engines/chewy/rooms/room82.cpp
engines/chewy/rooms/room84.cpp
engines/chewy/rooms/room85.cpp
engines/chewy/rooms/room86.cpp
engines/chewy/rooms/room87.cpp
engines/chewy/rooms/room89.cpp
engines/chewy/rooms/room90.cpp
engines/chewy/rooms/room91.cpp
engines/chewy/rooms/room94.cpp
engines/chewy/rooms/room95.cpp
engines/chewy/rooms/room96.cpp
engines/chewy/rooms/room97.cpp
engines/chewy/sprite.cpp
engines/chewy/t_event.cpp
engines/chewy/video/video_player.cpp
diff --git a/engines/chewy/atds.cpp b/engines/chewy/atds.cpp
index 8a1162d92ad..e99020b6526 100644
--- a/engines/chewy/atds.cpp
+++ b/engines/chewy/atds.cpp
@@ -133,7 +133,7 @@ void Atdsys::init() {
set_handle(ATDS_TXT, INV_USE_DATA, USE_TAP_OFF, USE_TAP_MAX);
_G(gameState).AadSilent = 10;
_G(gameState).DelaySpeed = 5;
- _G(spieler_vector)[P_CHEWY].Delay = _G(gameState).DelaySpeed;
+ _G(moveState)[P_CHEWY].Delay = _G(gameState).DelaySpeed;
set_delay(&_G(gameState).DelaySpeed, _G(gameState).AadSilent);
set_string_end_func(&atdsStringStart);
}
@@ -673,7 +673,7 @@ void Atdsys::print_aad(int16 scrX, int16 scrY) {
if (_atdsv._vocNr != _aadv._strHeader->_vocNr - ATDS_VOC_OFFSET) {
_atdsv._vocNr = _aadv._strHeader->_vocNr - ATDS_VOC_OFFSET;
g_engine->_sound->playSpeech(_atdsv._vocNr, false);
- int16 vocx = _G(spieler_vector)[personId].Xypos[0] -
+ int16 vocx = _G(moveState)[personId].Xypos[0] -
_G(gameState).scrollx + _G(spieler_mi)[personId].HotX;
g_engine->_sound->setSoundChannelBalance(0, getStereoPos(vocx));
diff --git a/engines/chewy/chewy.cpp b/engines/chewy/chewy.cpp
index e443d125160..3d117e53dfa 100644
--- a/engines/chewy/chewy.cpp
+++ b/engines/chewy/chewy.cpp
@@ -141,8 +141,8 @@ Common::Error ChewyEngine::saveGameStream(Common::WriteStream *stream, bool isAu
Common::Serializer s(nullptr, stream);
for (int i = 0; i < MAX_PERSON; i++) {
- _G(gameState).X[i] = _G(spieler_vector)[i].Xypos[0];
- _G(gameState).Y[i] = _G(spieler_vector)[i].Xypos[1];
+ _G(gameState).X[i] = _G(moveState)[i].Xypos[0];
+ _G(gameState).Y[i] = _G(moveState)[i].Xypos[1];
_G(gameState).Phase[i] = _G(person_end_phase)[i];
}
diff --git a/engines/chewy/dialogs/main_menu.cpp b/engines/chewy/dialogs/main_menu.cpp
index 8f983e3f431..4926f54b060 100644
--- a/engines/chewy/dialogs/main_menu.cpp
+++ b/engines/chewy/dialogs/main_menu.cpp
@@ -142,7 +142,7 @@ void MainMenu::animate() {
if (_G(ani_timer)->_timeFlag) {
_G(uhr)->resetTimer(0, 0);
_G(gameState).DelaySpeed = _G(FrameSpeed) / _G(gameState).FramesPerSecond;
- _G(spieler_vector)->Delay = _G(gameState).DelaySpeed + _G(spz_delay)[0];
+ _G(moveState)->Delay = _G(gameState).DelaySpeed + _G(spz_delay)[0];
_G(FrameSpeed) = 0;
_G(det)->set_global_delay(_G(gameState).DelaySpeed);
}
@@ -189,8 +189,8 @@ void MainMenu::startGame() {
_G(gameState)._personRoomNr[P_CHEWY] = 0;
_G(room)->loadRoom(&_G(room_blk), 0, &_G(gameState));
- _G(spieler_vector)[P_CHEWY].Phase = 6;
- _G(spieler_vector)[P_CHEWY].PhAnz = _G(chewy_ph_nr)[6];
+ _G(moveState)[P_CHEWY].Phase = 6;
+ _G(moveState)[P_CHEWY].PhAnz = _G(chewy_ph_nr)[6];
setPersonPos(160, 80, P_CHEWY, P_RIGHT);
_G(fx_blend) = BLEND3;
_G(gameState)._personHide[P_CHEWY] = false;
@@ -238,7 +238,7 @@ void MainMenu::playGame() {
_G(flags).MainInput = true;
_G(flags).ShowAtsInvTxt = true;
_G(cur)->show_cur();
- _G(spieler_vector)[P_CHEWY].Count = 0;
+ _G(moveState)[P_CHEWY].Count = 0;
_G(uhr)->resetTimer(0, 0);
while (!SHOULD_QUIT && !mainLoop(1)) {
diff --git a/engines/chewy/globals.h b/engines/chewy/globals.h
index 260b36e1aac..039301ff069 100644
--- a/engines/chewy/globals.h
+++ b/engines/chewy/globals.h
@@ -194,7 +194,7 @@ public:
Atdsys *_atds = nullptr;
MovClass *_mov = nullptr;
- ObjMov _spieler_vector[MAX_PERSON];
+ ObjMov _moveState[MAX_PERSON];
SprInfo _spr_info[MAX_PROG_ANI];
MovInfo _spieler_mi[MAX_PERSON];
ObjMov _auto_mov_vector[MAX_OBJ_MOV];
diff --git a/engines/chewy/main.cpp b/engines/chewy/main.cpp
index 0d20cff0551..b84e819a866 100644
--- a/engines/chewy/main.cpp
+++ b/engines/chewy/main.cpp
@@ -449,7 +449,7 @@ void setupScreen(SetupScreenMode mode) {
if (_G(ani_timer)[0]._timeFlag) {
_G(uhr)->resetTimer(0, 0);
_G(gameState).DelaySpeed = _G(FrameSpeed) / _G(gameState).FramesPerSecond;
- _G(spieler_vector)[P_CHEWY].Delay = _G(gameState).DelaySpeed + _G(spz_delay)[P_CHEWY];
+ _G(moveState)[P_CHEWY].Delay = _G(gameState).DelaySpeed + _G(spz_delay)[P_CHEWY];
_G(FrameSpeed) = 0;
_G(det)->set_global_delay(_G(gameState).DelaySpeed);
}
@@ -458,7 +458,7 @@ void setupScreen(SetupScreenMode mode) {
_G(out)->map_spr2screen(_G(ablage)[_G(room_blk).AkAblage], _G(gameState).scrollx, _G(gameState).scrolly);
for (i = 0; i < MAX_PERSON; i++)
- zoom_mov_anpass(&_G(spieler_vector)[i], &_G(spieler_mi)[i]);
+ zoom_mov_anpass(&_G(moveState)[i], &_G(spieler_mi)[i]);
if (_G(SetUpScreenFunc) && _G(menu_display) == 0 && !_G(flags).InventMenu) {
_G(SetUpScreenFunc)();
@@ -498,19 +498,19 @@ void setupScreen(SetupScreenMode mode) {
_G(gameState).scrollx + _G(spieler_mi)[P_CHEWY].HotX;
_G(gpkt).Dy = g_events->_mousePos.y - _G(spieler_mi)[P_CHEWY].HotMovY +
_G(gameState).scrolly + _G(spieler_mi)[P_CHEWY].HotY;
- _G(gpkt).Sx = _G(spieler_vector)[P_CHEWY].Xypos[0] +
+ _G(gpkt).Sx = _G(moveState)[P_CHEWY].Xypos[0] +
_G(spieler_mi)[P_CHEWY].HotX;
- _G(gpkt).Sy = _G(spieler_vector)[P_CHEWY].Xypos[1] +
+ _G(gpkt).Sy = _G(moveState)[P_CHEWY].Xypos[1] +
_G(spieler_mi)[P_CHEWY].HotY;
_G(gpkt).AkMovEbene = 1;
_G(mov)->goto_xy(&_G(gpkt));
- _G(spieler_mi)[P_CHEWY].XyzStart[0] = _G(spieler_vector)[P_CHEWY].Xypos[0];
- _G(spieler_mi)[P_CHEWY].XyzStart[1] = _G(spieler_vector)[P_CHEWY].Xypos[1];
+ _G(spieler_mi)[P_CHEWY].XyzStart[0] = _G(moveState)[P_CHEWY].Xypos[0];
+ _G(spieler_mi)[P_CHEWY].XyzStart[1] = _G(moveState)[P_CHEWY].Xypos[1];
_G(spieler_mi)[P_CHEWY].XyzEnd[0] = _G(gpkt).Dx - _G(spieler_mi)[P_CHEWY].HotX;
_G(spieler_mi)[P_CHEWY].XyzEnd[1] = _G(gpkt).Dy - _G(spieler_mi)[P_CHEWY].HotY;
- _G(mov)->get_mov_vector((int16 *)_G(spieler_mi)[P_CHEWY].XyzStart, (int16 *)_G(spieler_mi)[P_CHEWY].XyzEnd, _G(spieler_mi)[P_CHEWY].Vorschub, &_G(spieler_vector)[P_CHEWY]);
- get_phase(&_G(spieler_vector)[P_CHEWY], &_G(spieler_mi)[P_CHEWY]);
- _G(spieler_vector)[P_CHEWY]._delayCount = 0;
+ _G(mov)->get_mov_vector((int16 *)_G(spieler_mi)[P_CHEWY].XyzStart, (int16 *)_G(spieler_mi)[P_CHEWY].XyzEnd, _G(spieler_mi)[P_CHEWY].Vorschub, &_G(moveState)[P_CHEWY]);
+ get_phase(&_G(moveState)[P_CHEWY], &_G(spieler_mi)[P_CHEWY]);
+ _G(moveState)[P_CHEWY]._delayCount = 0;
_G(auto_p_nr) = P_CHEWY;
}
}
@@ -521,14 +521,14 @@ void setupScreen(SetupScreenMode mode) {
if (_G(fx_blend)) {
const int16 paletteId = _G(barriers)->getBarrierId(
- _G(spieler_vector)[P_CHEWY].Xypos[0] + _G(spieler_mi)[P_CHEWY].HotX,
- _G(spieler_vector)[P_CHEWY].Xypos[1] + _G(spieler_mi)[P_CHEWY].HotY);
+ _G(moveState)[P_CHEWY].Xypos[0] + _G(spieler_mi)[P_CHEWY].HotX,
+ _G(moveState)[P_CHEWY].Xypos[1] + _G(spieler_mi)[P_CHEWY].HotY);
checkShadow(paletteId, 0);
} else {
for (i = 0; i < MAX_PERSON; i++) {
- mov_objekt(&_G(spieler_vector)[i], &_G(spieler_mi)[i]);
- _G(spieler_mi)[i].XyzStart[0] = _G(spieler_vector)[i].Xypos[0];
- _G(spieler_mi)[i].XyzStart[1] = _G(spieler_vector)[i].Xypos[1];
+ mov_objekt(&_G(moveState)[i], &_G(spieler_mi)[i]);
+ _G(spieler_mi)[i].XyzStart[0] = _G(moveState)[i].Xypos[0];
+ _G(spieler_mi)[i].XyzStart[1] = _G(moveState)[i].Xypos[1];
}
}
@@ -570,8 +570,8 @@ void setupScreen(SetupScreenMode mode) {
}
_G(atds)->print_aad(_G(gameState).scrollx, _G(gameState).scrolly);
- _G(atds)->print_ats(_G(spieler_vector)[P_CHEWY].Xypos[0] + CH_HOT_X,
- _G(spieler_vector)[P_CHEWY].Xypos[1], _G(gameState).scrollx, _G(gameState).scrolly);
+ _G(atds)->print_ats(_G(moveState)[P_CHEWY].Xypos[0] + CH_HOT_X,
+ _G(moveState)[P_CHEWY].Xypos[1], _G(gameState).scrollx, _G(gameState).scrolly);
_G(mouseLeftClick) = false;
if (mode == DO_SETUP) {
_G(out)->setPointer(nullptr);
@@ -609,8 +609,8 @@ void setupScreen(SetupScreenMode mode) {
_G(cur_hide_flag) = false;
int16 *ScrXy = (int16 *)_G(ablage)[_G(room_blk).AkAblage];
if (!_G(menu_display))
- calc_scroll(_G(spieler_vector)[P_CHEWY].Xypos[0] + _G(spieler_mi)[P_CHEWY].HotX,
- _G(spieler_vector)[P_CHEWY].Xypos[1] + _G(spieler_mi)[P_CHEWY].HotY,
+ calc_scroll(_G(moveState)[P_CHEWY].Xypos[0] + _G(spieler_mi)[P_CHEWY].HotX,
+ _G(moveState)[P_CHEWY].Xypos[1] + _G(spieler_mi)[P_CHEWY].HotY,
ScrXy[0], ScrXy[1],
&_G(gameState).scrollx, &_G(gameState).scrolly);
@@ -677,7 +677,7 @@ void mous_obj_action(int16 nr, int16 mode, int16 txt_mode, int16 txt_nr) {
_G(gameState).inv_cur = false;
_G(menu_item) = CUR_WALK;
cursorChoice(_G(menu_item));
- _G(spieler_vector)[P_CHEWY]._delayCount = 0;
+ _G(moveState)[P_CHEWY]._delayCount = 0;
if (_G(gameState).AkInvent != -1)
_G(gameState).room_m_obj[_G(gameState).AkInvent].RoomNr = 255;
@@ -1138,19 +1138,19 @@ bool autoMove(int16 movNr, int16 playerNum) {
_G(spieler_mi)[playerNum].HotMovX + _G(spieler_mi)[playerNum].HotX;
_G(gpkt).Dy = _G(Rdi)->AutoMov[movNr]._y -
_G(spieler_mi)[playerNum].HotMovY + _G(spieler_mi)[playerNum].HotY;
- _G(gpkt).Sx = _G(spieler_vector)[playerNum].Xypos[0] + _G(spieler_mi)[playerNum].HotX;
- _G(gpkt).Sy = _G(spieler_vector)[playerNum].Xypos[1] + _G(spieler_mi)[playerNum].HotY;
+ _G(gpkt).Sx = _G(moveState)[playerNum].Xypos[0] + _G(spieler_mi)[playerNum].HotX;
+ _G(gpkt).Sy = _G(moveState)[playerNum].Xypos[1] + _G(spieler_mi)[playerNum].HotY;
_G(gpkt).AkMovEbene = 1;
_G(mov)->goto_xy(&_G(gpkt));
- _G(spieler_mi)[playerNum].XyzStart[0] = _G(spieler_vector)[playerNum].Xypos[0];
- _G(spieler_mi)[playerNum].XyzStart[1] = _G(spieler_vector)[playerNum].Xypos[1];
+ _G(spieler_mi)[playerNum].XyzStart[0] = _G(moveState)[playerNum].Xypos[0];
+ _G(spieler_mi)[playerNum].XyzStart[1] = _G(moveState)[playerNum].Xypos[1];
_G(spieler_mi)[playerNum].XyzEnd[0] = _G(gpkt).Dx - _G(spieler_mi)[playerNum].HotX;
_G(spieler_mi)[playerNum].XyzEnd[1] = _G(gpkt).Dy - _G(spieler_mi)[playerNum].HotY;
_G(mov)->get_mov_vector((int16 *)_G(spieler_mi)[playerNum].XyzStart, (int16 *)_G(spieler_mi)[playerNum].XyzEnd,
- _G(spieler_mi)[playerNum].Vorschub, &_G(spieler_vector)[playerNum]);
- get_phase(&_G(spieler_vector)[playerNum], &_G(spieler_mi)[playerNum]);
- _G(spieler_vector)[playerNum]._delayCount = 0;
+ _G(spieler_mi)[playerNum].Vorschub, &_G(moveState)[playerNum]);
+ get_phase(&_G(moveState)[playerNum], &_G(spieler_mi)[playerNum]);
+ _G(moveState)[playerNum]._delayCount = 0;
if (_G(mov)->auto_go_status()) {
while (_G(mov)->auto_go_status()) {
@@ -1168,20 +1168,20 @@ bool autoMove(int16 movNr, int16 playerNum) {
}
if (_G(flags).ChAutoMov) {
bool endLoopFl = false;
- _G(spieler_mi)[playerNum].XyzStart[0] = _G(spieler_vector)[playerNum].Xypos[0];
- _G(spieler_mi)[playerNum].XyzStart[1] = _G(spieler_vector)[playerNum].Xypos[1];
+ _G(spieler_mi)[playerNum].XyzStart[0] = _G(moveState)[playerNum].Xypos[0];
+ _G(spieler_mi)[playerNum].XyzStart[1] = _G(moveState)[playerNum].Xypos[1];
_G(spieler_mi)[playerNum].XyzEnd[0] = _G(gpkt).Dx - _G(spieler_mi)[playerNum].HotX;
_G(spieler_mi)[playerNum].XyzEnd[1] = _G(gpkt).Dy - _G(spieler_mi)[playerNum].HotY;
- _G(mov)->get_mov_vector((int16 *)_G(spieler_mi)[playerNum].XyzStart, (int16 *)_G(spieler_mi)[playerNum].XyzEnd, _G(spieler_mi)[playerNum].Vorschub, &_G(spieler_vector)[playerNum]);
- get_phase(&_G(spieler_vector)[playerNum], &_G(spieler_mi)[playerNum]);
+ _G(mov)->get_mov_vector((int16 *)_G(spieler_mi)[playerNum].XyzStart, (int16 *)_G(spieler_mi)[playerNum].XyzEnd, _G(spieler_mi)[playerNum].Vorschub, &_G(moveState)[playerNum]);
+ get_phase(&_G(moveState)[playerNum], &_G(spieler_mi)[playerNum]);
while (!endLoopFl) {
if (_G(in)->getSwitchCode() == Common::KEYCODE_ESCAPE || key == Common::KEYCODE_ESCAPE) {
if (_G(flags).ExitMov || _G(flags).BreakAMov) {
- _G(spieler_vector)[playerNum].Count = 0;
+ _G(moveState)[playerNum].Count = 0;
movingFl = false;
}
}
- if (!_G(spieler_vector)[playerNum].Count) {
+ if (!_G(moveState)[playerNum].Count) {
if (movingFl) {
if (_G(flags).ExitMov == false && _G(flags).ChAutoMov) {
@@ -1211,25 +1211,25 @@ void goAutoXy(int16 x, int16 y, int16 personNum, int16 mode) {
int16 tmp = _G(mouseLeftClick);
_G(mouseLeftClick) = false;
- _G(spieler_mi)[personNum].XyzStart[0] = _G(spieler_vector)[personNum].Xypos[0];
- _G(spieler_mi)[personNum].XyzStart[1] = _G(spieler_vector)[personNum].Xypos[1];
+ _G(spieler_mi)[personNum].XyzStart[0] = _G(moveState)[personNum].Xypos[0];
+ _G(spieler_mi)[personNum].XyzStart[1] = _G(moveState)[personNum].Xypos[1];
_G(spieler_mi)[personNum].XyzEnd[0] = x;
_G(spieler_mi)[personNum].XyzEnd[1] = y;
_G(mov)->get_mov_vector((int16 *)_G(spieler_mi)[personNum].XyzStart, (int16 *)_G(spieler_mi)[personNum].XyzEnd,
- _G(spieler_mi)[personNum].Vorschub, &_G(spieler_vector)[personNum]);
+ _G(spieler_mi)[personNum].Vorschub, &_G(moveState)[personNum]);
- if (_G(spieler_vector)[personNum].Count)
- get_phase(&_G(spieler_vector)[personNum], &_G(spieler_mi)[personNum]);
+ if (_G(moveState)[personNum].Count)
+ get_phase(&_G(moveState)[personNum], &_G(spieler_mi)[personNum]);
if (mode == ANI_WAIT) {
bool endLoopFl = false;
while (!endLoopFl) {
if (_G(in)->getSwitchCode() == Common::KEYCODE_ESCAPE) {
if (_G(flags).ExitMov || _G(flags).BreakAMov) {
- _G(spieler_vector)[personNum].Count = 0;
+ _G(moveState)[personNum].Count = 0;
move_status = false;
}
}
- if (!_G(spieler_vector)[personNum].Count) {
+ if (!_G(moveState)[personNum].Count) {
if (move_status) {
setPersonPos(_G(spieler_mi)[personNum].XyzEnd[0],
_G(spieler_mi)[personNum].XyzEnd[1], personNum, -1);
@@ -1314,7 +1314,7 @@ int16 calcMouseText(int16 x, int16 y, int16 mode) {
int16 action_ret = 0;
if (!_G(atds)->getControlBit(txtNr, ATS_ACTIVE_BIT)) {
if (_G(menu_item) != CUR_WALK && _G(menu_item) != CUR_USE) {
- if (x + _G(gameState).scrollx > _G(spieler_vector)[P_CHEWY].Xypos[0])
+ if (x + _G(gameState).scrollx > _G(moveState)[P_CHEWY].Xypos[0])
setPersonSpr(P_RIGHT, P_CHEWY);
else
setPersonSpr(P_LEFT, P_CHEWY);
@@ -1350,7 +1350,7 @@ int16 calcMouseText(int16 x, int16 y, int16 mode) {
if (ok && !action_ret && txtMode == TXT_MARK_USE && dispFl) {
if (!_G(atds)->getControlBit(txtNr, ATS_ACTIVE_BIT)) {
if (_G(menu_item) != CUR_WALK) {
- if (x + _G(gameState).scrollx > _G(spieler_vector)[P_CHEWY].Xypos[0])
+ if (x + _G(gameState).scrollx > _G(moveState)[P_CHEWY].Xypos[0])
setPersonSpr(P_RIGHT, P_CHEWY);
else
setPersonSpr(P_LEFT, P_CHEWY);
@@ -1399,26 +1399,26 @@ int16 is_mouse_person(int16 x, int16 y) {
if (!_G(spz_ani)[i]) {
switch (i) {
case P_CHEWY:
- xy = (int16 *)_G(chewy)->image[_G(chewy_ph)[_G(spieler_vector)[P_CHEWY].Phase * 8 + _G(spieler_vector)[P_CHEWY].PhNr]];
+ xy = (int16 *)_G(chewy)->image[_G(chewy_ph)[_G(moveState)[P_CHEWY].Phase * 8 + _G(moveState)[P_CHEWY].PhNr]];
break;
case P_HOWARD:
case P_NICHELLE:
if (_G(gameState)._personRoomNr[i] != _G(gameState)._personRoomNr[P_CHEWY])
check = false;
- xy = (int16 *)_G(PersonTaf)[i]->image[_G(PersonSpr)[i][_G(spieler_vector)[i].PhNr]];
+ xy = (int16 *)_G(PersonTaf)[i]->image[_G(PersonSpr)[i][_G(moveState)[i].PhNr]];
break;
default:
break;
}
} else
- xy = (int16 *)_G(spz_tinfo)->image[_G(spz_spr_nr)[_G(spieler_vector)[i].PhNr]];
+ xy = (int16 *)_G(spz_tinfo)->image[_G(spz_spr_nr)[_G(moveState)[i].PhNr]];
if (check) {
- if (x + _G(gameState).scrollx >= _G(spieler_vector)[i].Xypos[0] &&
- x + _G(gameState).scrollx <= _G(spieler_vector)[i].Xypos[0] + xy[0] + _G(spieler_vector)[i].Xzoom &&
- y + _G(gameState).scrolly >= _G(spieler_vector)[i].Xypos[1] &&
- y + _G(gameState).scrolly <= _G(spieler_vector)[i].Xypos[1] + xy[1] + _G(spieler_vector)[i].Yzoom) {
+ if (x + _G(gameState).scrollx >= _G(moveState)[i].Xypos[0] &&
+ x + _G(gameState).scrollx <= _G(moveState)[i].Xypos[0] + xy[0] + _G(moveState)[i].Xzoom &&
+ y + _G(gameState).scrolly >= _G(moveState)[i].Xypos[1] &&
+ y + _G(gameState).scrolly <= _G(moveState)[i].Xypos[1] + xy[1] + _G(moveState)[i].Yzoom) {
is_person = i;
}
}
@@ -1511,7 +1511,7 @@ void calc_mouse_person(int16 x, int16 y) {
if (diaNr == -1) {
if (txt_nr != 30000) {
if (_G(menu_item) != CUR_WALK) {
- if (x + _G(gameState).scrollx > _G(spieler_vector)[P_CHEWY].Xypos[0])
+ if (x + _G(gameState).scrollx > _G(moveState)[P_CHEWY].Xypos[0])
setPersonSpr(P_RIGHT, P_CHEWY);
else
setPersonSpr(P_LEFT, P_CHEWY);
@@ -1522,7 +1522,7 @@ void calc_mouse_person(int16 x, int16 y) {
}
} else {
if (_G(menu_item) != CUR_WALK) {
- if (x + _G(gameState).scrollx > _G(spieler_vector)[P_CHEWY].Xypos[0])
+ if (x + _G(gameState).scrollx > _G(moveState)[P_CHEWY].Xypos[0])
setPersonSpr(P_RIGHT, P_CHEWY);
else
setPersonSpr(P_LEFT, P_CHEWY);
@@ -1689,20 +1689,20 @@ void calc_ausgang(int16 x, int16 y) {
_G(Rdi)->AutoMov[_G(gameState).room_e_obj[nr].ExitMov]._y - _G(spieler_mi)[_G(auto_p_nr)].HotMovY
, P_CHEWY, -1);
int16 *ScrXy = (int16 *)_G(ablage)[_G(room_blk).AkAblage];
- get_scroll_off(_G(spieler_vector)[P_CHEWY].Xypos[0] + _G(spieler_mi)[P_CHEWY].HotX,
- _G(spieler_vector)[P_CHEWY].Xypos[1] + _G(spieler_mi)[P_CHEWY].HotY,
+ get_scroll_off(_G(moveState)[P_CHEWY].Xypos[0] + _G(spieler_mi)[P_CHEWY].HotX,
+ _G(moveState)[P_CHEWY].Xypos[1] + _G(spieler_mi)[P_CHEWY].HotY,
ScrXy[0], ScrXy[1],
&_G(gameState).scrollx, &_G(gameState).scrolly);
- const int16 paletteId = _G(barriers)->getBarrierId(_G(spieler_vector)[P_CHEWY].Xypos[0] + _G(spieler_mi)[P_CHEWY].HotX,
- _G(spieler_vector)[P_CHEWY].Xypos[1] + _G(spieler_mi)[P_CHEWY].HotY);
+ const int16 paletteId = _G(barriers)->getBarrierId(_G(moveState)[P_CHEWY].Xypos[0] + _G(spieler_mi)[P_CHEWY].HotX,
+ _G(moveState)[P_CHEWY].Xypos[1] + _G(spieler_mi)[P_CHEWY].HotY);
checkShadow(paletteId, 0);
setPersonSpr(_G(Rdi)->AutoMov[_G(gameState).room_e_obj[nr].ExitMov]._sprNr, P_CHEWY);
- _G(spieler_vector)[P_CHEWY]._delayCount = 0;
+ _G(moveState)[P_CHEWY]._delayCount = 0;
_G(fx_blend) = BLEND1;
_G(auto_obj) = 0;
- _G(spieler_vector)[P_CHEWY].Xzoom = 0;
- _G(spieler_vector)[P_CHEWY].Yzoom = 0;
+ _G(moveState)[P_CHEWY].Xzoom = 0;
+ _G(moveState)[P_CHEWY].Yzoom = 0;
_G(flags).ShowAtsInvTxt = true;
_G(menu_item) = CUR_WALK;
cursorChoice(_G(menu_item));
@@ -1818,13 +1818,13 @@ void calc_auto_go() {
&_G(spieler_mi)[_G(auto_p_nr)].XyzEnd[0],
&_G(spieler_mi)[_G(auto_p_nr)].XyzEnd[1]) != -1)
{
- _G(spieler_mi)[_G(auto_p_nr)].XyzStart[0] = _G(spieler_vector)[_G(auto_p_nr)].Xypos[0];
- _G(spieler_mi)[_G(auto_p_nr)].XyzStart[1] = _G(spieler_vector)[_G(auto_p_nr)].Xypos[1];
+ _G(spieler_mi)[_G(auto_p_nr)].XyzStart[0] = _G(moveState)[_G(auto_p_nr)].Xypos[0];
+ _G(spieler_mi)[_G(auto_p_nr)].XyzStart[1] = _G(moveState)[_G(auto_p_nr)].Xypos[1];
_G(spieler_mi)[_G(auto_p_nr)].XyzEnd[0] -= x_offset;
_G(spieler_mi)[_G(auto_p_nr)].XyzEnd[1] -= y_offset;
- _G(mov)->get_mov_vector((int16 *)_G(spieler_mi)[_G(auto_p_nr)].XyzStart, (int16 *)_G(spieler_mi)[_G(auto_p_nr)].XyzEnd, _G(spieler_mi)[_G(auto_p_nr)].Vorschub, &_G(spieler_vector)[_G(auto_p_nr)])
+ _G(mov)->get_mov_vector((int16 *)_G(spieler_mi)[_G(auto_p_nr)].XyzStart, (int16 *)_G(spieler_mi)[_G(auto_p_nr)].XyzEnd, _G(spieler_mi)[_G(auto_p_nr)].Vorschub, &_G(moveState)[_G(auto_p_nr)])
;
- get_phase(&_G(spieler_vector)[_G(auto_p_nr)], &_G(spieler_mi)[_G(auto_p_nr)]);
+ get_phase(&_G(moveState)[_G(auto_p_nr)], &_G(spieler_mi)[_G(auto_p_nr)]);
}
}
@@ -1867,7 +1867,7 @@ bool is_chewy_busy() {
if (_G(atds)->aadGetStatus() == -1) {
if (_G(atds)->ads_get_status() == -1) {
if (!_G(mov)->auto_go_status()) {
- if (!_G(spieler_vector)[P_CHEWY].Count) {
+ if (!_G(moveState)[P_CHEWY].Count) {
if (!_G(flags).ExitMov) {
if (!_G(spz_ani)[P_CHEWY]) {
ret = false;
diff --git a/engines/chewy/r_event.cpp b/engines/chewy/r_event.cpp
index a1d31eaa03b..d68a7213b67 100644
--- a/engines/chewy/r_event.cpp
+++ b/engines/chewy/r_event.cpp
@@ -443,7 +443,7 @@ void exit_room(int16 eib_nr) {
case 120:
case 139:
x = -44;
- y = _G(spieler_vector)[P_CHEWY].Xypos[1];
+ y = _G(moveState)[P_CHEWY].Xypos[1];
break;
case 1:
@@ -465,7 +465,7 @@ void exit_room(int16 eib_nr) {
case 135: {
int16 *xy = (int16 *)_G(ablage)[_G(room_blk).AkAblage];
x = xy[0] + 30;
- y = _G(spieler_vector)[P_CHEWY].Xypos[1];
+ y = _G(moveState)[P_CHEWY].Xypos[1];
}
break;
@@ -480,7 +480,7 @@ void exit_room(int16 eib_nr) {
case 122:
case 131: {
int16 *xy = (int16 *)_G(ablage)[_G(room_blk).AkAblage];
- x = _G(spieler_vector)[P_CHEWY].Xypos[0];
+ x = _G(moveState)[P_CHEWY].Xypos[0];
y = xy[1] + 3;
}
break;
@@ -499,8 +499,8 @@ void exit_room(int16 eib_nr) {
case 50:
case 65:
case 126:
- setPersonPos(_G(spieler_vector)[P_CHEWY].Xypos[0],
- _G(spieler_vector)[P_CHEWY].Xypos[1], P_CHEWY, P_RIGHT);
+ setPersonPos(_G(moveState)[P_CHEWY].Xypos[0],
+ _G(moveState)[P_CHEWY].Xypos[1], P_CHEWY, P_RIGHT);
setupScreen(DO_SETUP);
break;
@@ -515,8 +515,8 @@ void exit_room(int16 eib_nr) {
case 36:
case 71:
case 96:
- setPersonPos(_G(spieler_vector)[P_CHEWY].Xypos[0],
- _G(spieler_vector)[P_CHEWY].Xypos[1], P_CHEWY, P_LEFT);
+ setPersonPos(_G(moveState)[P_CHEWY].Xypos[0],
+ _G(moveState)[P_CHEWY].Xypos[1], P_CHEWY, P_LEFT);
setupScreen(DO_SETUP);
break;
@@ -526,8 +526,8 @@ void exit_room(int16 eib_nr) {
break;
case 72:
- x = _G(spieler_vector)[P_CHEWY].Xypos[0];
- y = _G(spieler_vector)[P_CHEWY].Xypos[1] - 10;
+ x = _G(moveState)[P_CHEWY].Xypos[0];
+ y = _G(moveState)[P_CHEWY].Xypos[1] - 10;
break;
case 75:
@@ -537,34 +537,34 @@ void exit_room(int16 eib_nr) {
break;
case 84:
- x = _G(spieler_vector)[P_CHEWY].Xypos[0] - 70;
- y = _G(spieler_vector)[P_CHEWY].Xypos[1] - 50;
+ x = _G(moveState)[P_CHEWY].Xypos[0] - 70;
+ y = _G(moveState)[P_CHEWY].Xypos[1] - 50;
_G(HowardMov) = 1;
break;
case 85:
- x = _G(spieler_vector)[P_CHEWY].Xypos[0] + 70;
- y = _G(spieler_vector)[P_CHEWY].Xypos[1];
+ x = _G(moveState)[P_CHEWY].Xypos[0] + 70;
+ y = _G(moveState)[P_CHEWY].Xypos[1];
_G(HowardMov) = 1;
break;
case 86:
_G(det)->showStaticSpr(0);
- x = _G(spieler_vector)[P_CHEWY].Xypos[0] - 44;
- y = _G(spieler_vector)[P_CHEWY].Xypos[1];
+ x = _G(moveState)[P_CHEWY].Xypos[0] - 44;
+ y = _G(moveState)[P_CHEWY].Xypos[1];
_G(HowardMov) = 2;
break;
case 90:
_G(det)->showStaticSpr(8);
- x = _G(spieler_vector)[P_CHEWY].Xypos[0] - 60;
- y = _G(spieler_vector)[P_CHEWY].Xypos[1];
+ x = _G(moveState)[P_CHEWY].Xypos[0] - 60;
+ y = _G(moveState)[P_CHEWY].Xypos[1];
break;
case 94:
_G(det)->showStaticSpr(3);
- x = _G(spieler_vector)[P_CHEWY].Xypos[0] - 40;
- y = _G(spieler_vector)[P_CHEWY].Xypos[1] - 10;
+ x = _G(moveState)[P_CHEWY].Xypos[0] - 40;
+ y = _G(moveState)[P_CHEWY].Xypos[1] - 10;
break;
case 127:
@@ -579,13 +579,13 @@ void exit_room(int16 eib_nr) {
break;
case 140:
- x = _G(spieler_vector)[P_CHEWY].Xypos[0] + 40;
- y = _G(spieler_vector)[P_CHEWY].Xypos[1];
+ x = _G(moveState)[P_CHEWY].Xypos[0] + 40;
+ y = _G(moveState)[P_CHEWY].Xypos[1];
break;
case 141:
- x = _G(spieler_vector)[P_CHEWY].Xypos[0] - 12;
- y = _G(spieler_vector)[P_CHEWY].Xypos[1];
+ x = _G(moveState)[P_CHEWY].Xypos[0] - 12;
+ y = _G(moveState)[P_CHEWY].Xypos[1];
break;
default:
diff --git a/engines/chewy/room.cpp b/engines/chewy/room.cpp
index 1f020f37045..0b7cacce2bb 100644
--- a/engines/chewy/room.cpp
+++ b/engines/chewy/room.cpp
@@ -125,7 +125,7 @@ void JungleRoom::rightEntry() {
void JungleRoom::setup_func() {
calc_person_look();
- const int posX = _G(spieler_vector)[P_CHEWY].Xypos[0];
+ const int posX = _G(moveState)[P_CHEWY].Xypos[0];
int howDestX, nicDestX;
if (posX < 40) {
@@ -523,7 +523,7 @@ void calc_person_look() {
for (int16 i = 1; i < MAX_PERSON; i++) {
if (_G(spieler_mi)[i].Id != NO_MOV_OBJ) {
- if (_G(spieler_vector)[i].Xypos[0] > _G(spieler_vector)[P_CHEWY].Xypos[0])
+ if (_G(moveState)[i].Xypos[0] > _G(moveState)[P_CHEWY].Xypos[0])
_G(person_end_phase)[i] = P_LEFT;
else
_G(person_end_phase)[i] = P_RIGHT;
diff --git a/engines/chewy/rooms/room00.cpp b/engines/chewy/rooms/room00.cpp
index b38be10cfb2..9f3242390e3 100644
--- a/engines/chewy/rooms/room00.cpp
+++ b/engines/chewy/rooms/room00.cpp
@@ -750,7 +750,7 @@ void Room0::feederAni() {
_G(room)->loadRoom(&_G(room_blk), _G(gameState)._personRoomNr[P_CHEWY], &_G(gameState));
setPersonPos(_G(Rdi)->AutoMov[4]._x - CH_HOT_MOV_X,
_G(Rdi)->AutoMov[4]._y - CH_HOT_MOV_Y, P_CHEWY, P_RIGHT);
- _G(spieler_vector)[P_CHEWY]._delayCount = 0;
+ _G(moveState)[P_CHEWY]._delayCount = 0;
checkShadow(4, 0);
_G(fx_blend) = BLEND1;
diff --git a/engines/chewy/rooms/room04.cpp b/engines/chewy/rooms/room04.cpp
index c66a06cf0f1..00c576f6152 100644
--- a/engines/chewy/rooms/room04.cpp
+++ b/engines/chewy/rooms/room04.cpp
@@ -126,7 +126,7 @@ int16 Room4::comp_probe() {
_G(menu_item) = CUR_WALK;
cursorChoice(_G(menu_item));
- _G(spieler_vector)[P_CHEWY]._delayCount = 0;
+ _G(moveState)[P_CHEWY]._delayCount = 0;
_G(mouseLeftClick) = false;
_G(minfo).button = 0;
_G(gameState)._personRoomNr[P_CHEWY] = 3;
diff --git a/engines/chewy/rooms/room09.cpp b/engines/chewy/rooms/room09.cpp
index 978ceeed9d1..00c609b83d5 100644
--- a/engines/chewy/rooms/room09.cpp
+++ b/engines/chewy/rooms/room09.cpp
@@ -74,7 +74,7 @@ void Room9::gtuer() {
void Room9::surimy() {
hideCur();
_G(gameState).R9Surimy = true;
- const int16 tmp = _G(spieler_vector)[P_CHEWY].Count;
+ const int16 tmp = _G(moveState)[P_CHEWY].Count;
stopPerson(P_CHEWY);
_G(atds)->setControlBit(75, ATS_ACTIVE_BIT);
_G(det)->hideStaticSpr(4);
@@ -83,8 +83,8 @@ void Room9::surimy() {
start_spz(CH_TALK11, 255, false, P_CHEWY);
startAadWait(56);
_G(gameState).room_e_obj[17].Attribut = EXIT_RIGHT;
- _G(spieler_vector)[P_CHEWY].Count = tmp;
- get_phase(&_G(spieler_vector)[P_CHEWY], &_G(spieler_mi)[P_CHEWY]);
+ _G(moveState)[P_CHEWY].Count = tmp;
+ get_phase(&_G(moveState)[P_CHEWY], &_G(spieler_mi)[P_CHEWY]);
_G(mov)->continue_auto_go();
showCur();
}
diff --git a/engines/chewy/rooms/room13.cpp b/engines/chewy/rooms/room13.cpp
index 8f4b0782c85..5f39ffeb3a5 100644
--- a/engines/chewy/rooms/room13.cpp
+++ b/engines/chewy/rooms/room13.cpp
@@ -102,8 +102,8 @@ void Room13::talk_bork() {
_G(gameState).R13BorkOk = true;
_G(gameState).R12ChewyBork = false;
_G(det)->showStaticSpr(13);
- _G(det)->setSetailPos(10, _G(spieler_vector)[P_CHEWY].Xypos[0], _G(spieler_vector)[P_CHEWY].Xypos[1]);
- _G(det)->setStaticPos(12, _G(spieler_vector)[P_CHEWY].Xypos[0], _G(spieler_vector)[P_CHEWY].Xypos[1], false, true);
+ _G(det)->setSetailPos(10, _G(moveState)[P_CHEWY].Xypos[0], _G(moveState)[P_CHEWY].Xypos[1]);
+ _G(det)->setStaticPos(12, _G(moveState)[P_CHEWY].Xypos[0], _G(moveState)[P_CHEWY].Xypos[1], false, true);
_G(gameState)._personHide[P_CHEWY] = true;
startAadWait(33);
_G(det)->stop_detail(9);
diff --git a/engines/chewy/rooms/room18.cpp b/engines/chewy/rooms/room18.cpp
index 4ac1d7f88d6..1ec83164173 100644
--- a/engines/chewy/rooms/room18.cpp
+++ b/engines/chewy/rooms/room18.cpp
@@ -243,7 +243,7 @@ int16 Room18::calc_surimy() {
_G(auto_mov_vector)[SURIMY_OBJ].Delay = _G(gameState).DelaySpeed;
_G(auto_mov_obj)[SURIMY_OBJ].Mode = true;
- if (_G(spieler_vector)[P_CHEWY].Xypos[1] < 150) {
+ if (_G(moveState)[P_CHEWY].Xypos[1] < 150) {
startDetailFrame(18, 1, ANI_FRONT, 8);
init_auto_obj(SURIMY_OBJ, &SURIMY_PHASEN[0][0], _G(mov_phasen)[SURIMY_OBJ].Lines, (const MovLine *)SURIMY_MPKT3);
diff --git a/engines/chewy/rooms/room21.cpp b/engines/chewy/rooms/room21.cpp
index 4a380f02101..b6944491de2 100644
--- a/engines/chewy/rooms/room21.cpp
+++ b/engines/chewy/rooms/room21.cpp
@@ -176,30 +176,30 @@ void Room21::chewy_kolli() {
xoff += _G(auto_mov_vector)[i].Xzoom;
yoff += _G(auto_mov_vector)[i].Yzoom;
- if ((!i && _G(spieler_vector)[P_CHEWY].Xypos[0] < 516) ||
- (i == 1 && _G(spieler_vector)[P_CHEWY].Xypos[1] > 70) ||
+ if ((!i && _G(moveState)[P_CHEWY].Xypos[0] < 516) ||
+ (i == 1 && _G(moveState)[P_CHEWY].Xypos[1] > 70) ||
(i == 2)) {
- if (_G(spieler_vector)[P_CHEWY].Xypos[0] + 12 >= _G(auto_mov_vector)[i].Xypos[0] + Cxy[0] &&
- _G(spieler_vector)[P_CHEWY].Xypos[0] + 12 <= _G(auto_mov_vector)[i].Xypos[0] + xoff + Cxy[0] &&
- _G(spieler_vector)[P_CHEWY].Xypos[1] + 12 >= _G(auto_mov_vector)[i].Xypos[1] + Cxy[1] &&
- _G(spieler_vector)[P_CHEWY].Xypos[1] + 12 <= _G(auto_mov_vector)[i].Xypos[1] + yoff + Cxy[1] &&
+ if (_G(moveState)[P_CHEWY].Xypos[0] + 12 >= _G(auto_mov_vector)[i].Xypos[0] + Cxy[0] &&
+ _G(moveState)[P_CHEWY].Xypos[0] + 12 <= _G(auto_mov_vector)[i].Xypos[0] + xoff + Cxy[0] &&
+ _G(moveState)[P_CHEWY].Xypos[1] + 12 >= _G(auto_mov_vector)[i].Xypos[1] + Cxy[1] &&
+ _G(moveState)[P_CHEWY].Xypos[1] + 12 <= _G(auto_mov_vector)[i].Xypos[1] + yoff + Cxy[1] &&
_G(mov_phasen)[i].Start == 1)
kolli = true;
}
}
if (kolli && !_G(flags).AutoAniPlay) {
- const int16 tmp = _G(spieler_vector)[P_CHEWY].Count;
+ const int16 tmp = _G(moveState)[P_CHEWY].Count;
stopPerson(P_CHEWY);
_G(flags).AutoAniPlay = true;
_G(gameState)._personHide[P_CHEWY] = true;
- int16 ani_nr = (_G(spieler_vector)[P_CHEWY].Xyvo[0] < 0) ? 10 : 11;
- _G(det)->setSetailPos(ani_nr, _G(spieler_vector)[P_CHEWY].Xypos[0], _G(spieler_vector)[P_CHEWY].Xypos[1]);
+ int16 ani_nr = (_G(moveState)[P_CHEWY].Xyvo[0] < 0) ? 10 : 11;
+ _G(det)->setSetailPos(ani_nr, _G(moveState)[P_CHEWY].Xypos[0], _G(moveState)[P_CHEWY].Xypos[1]);
startSetAILWait(ani_nr, 1, ANI_FRONT);
_G(gameState)._personHide[P_CHEWY] = false;
_G(flags).AutoAniPlay = false;
- _G(spieler_vector)[P_CHEWY].Count = tmp;
- get_phase(&_G(spieler_vector)[P_CHEWY], &_G(spieler_mi)[P_CHEWY]);
+ _G(moveState)[P_CHEWY].Count = tmp;
+ get_phase(&_G(moveState)[P_CHEWY], &_G(spieler_mi)[P_CHEWY]);
_G(mov)->continue_auto_go();
}
}
@@ -212,8 +212,8 @@ void Room21::salto() {
_G(gameState)._personHide[P_CHEWY] = true;
for (int16 i = 0; i < 3; i++) {
- _G(det)->setSetailPos(12 + i, _G(spieler_vector)[P_CHEWY].Xypos[0],
- _G(spieler_vector)[P_CHEWY].Xypos[1]);
+ _G(det)->setSetailPos(12 + i, _G(moveState)[P_CHEWY].Xypos[0],
+ _G(moveState)[P_CHEWY].Xypos[1]);
}
startAniBlock(3, ABLOCK19);
diff --git a/engines/chewy/rooms/room28.cpp b/engines/chewy/rooms/room28.cpp
index 10b601c4288..8a4cc81d208 100644
--- a/engines/chewy/rooms/room28.cpp
+++ b/engines/chewy/rooms/room28.cpp
@@ -64,7 +64,7 @@ void Room28::entry(int16 eib_nr) {
_G(gameState).R28EntryHaus = true;
setPersonPos(232, 100, P_HOWARD, P_RIGHT);
autoMove(3, P_HOWARD);
- goAutoXy(320, _G(spieler_vector)[P_HOWARD].Xypos[1], P_HOWARD, ANI_WAIT);
+ goAutoXy(320, _G(moveState)[P_HOWARD].Xypos[1], P_HOWARD, ANI_WAIT);
startAadWait(176);
} else if (_G(gameState).R31SurFurz && !_G(gameState).R28RKuerbis) {
_G(gameState).R28RKuerbis = true;
@@ -203,7 +203,7 @@ void Room28::haendler() {
void Room28::setup_func() {
calc_person_look();
- int16 x = (_G(spieler_vector)[P_CHEWY].Xypos[0] > 350) ? 420 : 320;
+ int16 x = (_G(moveState)[P_CHEWY].Xypos[0] > 350) ? 420 : 320;
goAutoXy(x, 113, P_HOWARD, ANI_GO);
}
@@ -243,13 +243,13 @@ void Room28::set_pump() {
if (_G(gameState)._personRoomNr[P_CHEWY] == 28) {
if (!_G(flags).AutoAniPlay) {
_G(flags).AutoAniPlay = true;
- if (_G(spieler_vector)[P_CHEWY].Xypos[0] < 380)
+ if (_G(moveState)[P_CHEWY].Xypos[0] < 380)
autoMove(5, P_CHEWY);
_G(gameState)._personHide[P_CHEWY] = true;
int16 tmp = (_G(person_end_phase)[P_CHEWY] == P_RIGHT) ? 1 : 0;
delInventory(K_MASKE_INV);
- _G(det)->setSetailPos(tmp, _G(spieler_vector)[P_CHEWY].Xypos[0], _G(spieler_vector)[P_CHEWY].Xypos[1]);
+ _G(det)->setSetailPos(tmp, _G(moveState)[P_CHEWY].Xypos[0], _G(moveState)[P_CHEWY].Xypos[1]);
if (_G(gameState).R28PumpTxt1 < 3) {
start_aad(137);
@@ -296,7 +296,7 @@ void Room28::get_pump() {
_G(gameState).R28ChewyPump = false;
_G(gameState)._personHide[P_CHEWY] = true;
int16 tmp = (_G(person_end_phase)[P_CHEWY] == P_RIGHT) ? 1 : 0;
- _G(det)->setSetailPos(tmp, _G(spieler_vector)[P_CHEWY].Xypos[0], _G(spieler_vector)[P_CHEWY].Xypos[1]);
+ _G(det)->setSetailPos(tmp, _G(moveState)[P_CHEWY].Xypos[0], _G(moveState)[P_CHEWY].Xypos[1]);
startSetAILWait(tmp, 1, ANI_BACK);
invent_2_slot(K_MASKE_INV);
diff --git a/engines/chewy/rooms/room40.cpp b/engines/chewy/rooms/room40.cpp
index 6e7f50570c1..0f418eaae5e 100644
--- a/engines/chewy/rooms/room40.cpp
+++ b/engines/chewy/rooms/room40.cpp
@@ -217,7 +217,7 @@ void Room40::setup_func() {
calc_person_look();
int16 x, y;
- const int16 sp_x = _G(spieler_vector)[P_CHEWY].Xypos[0];
+ const int16 sp_x = _G(moveState)[P_CHEWY].Xypos[0];
if (sp_x > 170 && sp_x < 255) {
x = 248;
y = 97;
@@ -231,8 +231,8 @@ void Room40::setup_func() {
x = 166;
y = 99;
} else {
- x = _G(spieler_vector)[P_HOWARD].Xypos[0];
- y = _G(spieler_vector)[P_HOWARD].Xypos[1];
+ x = _G(moveState)[P_HOWARD].Xypos[0];
+ y = _G(moveState)[P_HOWARD].Xypos[1];
}
goAutoXy(x, y, P_HOWARD, ANI_GO);
diff --git a/engines/chewy/rooms/room41.cpp b/engines/chewy/rooms/room41.cpp
index 099485924fb..51572217370 100644
--- a/engines/chewy/rooms/room41.cpp
+++ b/engines/chewy/rooms/room41.cpp
@@ -82,7 +82,7 @@ void Room41::xit() {
void Room41::setup_func() {
if (_G(gameState)._personRoomNr[P_HOWARD] == 41) {
calc_person_look();
- if (_G(spieler_vector)->Xypos[P_HOWARD] == 160) {
+ if (_G(moveState)->Xypos[P_HOWARD] == 160) {
goAutoXy(258, 75, P_HOWARD, ANI_GO);
} else {
goAutoXy(246, 120, P_HOWARD, ANI_GO);
diff --git a/engines/chewy/rooms/room45.cpp b/engines/chewy/rooms/room45.cpp
index b5ea4185f9b..659818a4211 100644
--- a/engines/chewy/rooms/room45.cpp
+++ b/engines/chewy/rooms/room45.cpp
@@ -143,7 +143,7 @@ void Room45::setup_func() {
if (_G(gameState)._personRoomNr[P_HOWARD] == 45 && _G(HowardMov) != 2) {
calc_person_look();
- const int16 ch_x = _G(spieler_vector)[P_CHEWY].Xypos[0];
+ const int16 ch_x = _G(moveState)[P_CHEWY].Xypos[0];
if (ch_x < 95) {
x = 18;
diff --git a/engines/chewy/rooms/room46.cpp b/engines/chewy/rooms/room46.cpp
index 673b1dd2aaa..29354c19c6b 100644
--- a/engines/chewy/rooms/room46.cpp
+++ b/engines/chewy/rooms/room46.cpp
@@ -81,7 +81,7 @@ void Room46::xit() {
void Room46::setup_func() {
calc_person_look();
int16 y = 64;
- const int16 ch_x = _G(spieler_vector)[P_CHEWY].Xypos[0];
+ const int16 ch_x = _G(moveState)[P_CHEWY].Xypos[0];
int16 x;
if (ch_x > 160) {
diff --git a/engines/chewy/rooms/room49.cpp b/engines/chewy/rooms/room49.cpp
index e0d7f2843c4..c76d95860a1 100644
--- a/engines/chewy/rooms/room49.cpp
+++ b/engines/chewy/rooms/room49.cpp
@@ -270,7 +270,7 @@ int16 Room49::use_taxi() {
void Room49::setup_func() {
if (_G(gameState)._personRoomNr[P_HOWARD] == 49) {
calc_person_look();
- const int16 ch_x = _G(spieler_vector)[P_CHEWY].Xypos[0];
+ const int16 ch_x = _G(moveState)[P_CHEWY].Xypos[0];
int16 x, y;
if (ch_x < 130) {
diff --git a/engines/chewy/rooms/room50.cpp b/engines/chewy/rooms/room50.cpp
index 0e7a5d34909..55cadae0c07 100644
--- a/engines/chewy/rooms/room50.cpp
+++ b/engines/chewy/rooms/room50.cpp
@@ -254,13 +254,13 @@ void Room50::setup_func() {
if (_G(gameState)._personRoomNr[P_HOWARD] == 50) {
calc_person_look();
- const int16 ch_x = _G(spieler_vector)[P_CHEWY].Xypos[0];
+ const int16 ch_x = _G(moveState)[P_CHEWY].Xypos[0];
int16 x, y;
if (ch_x < 72) {
x = 1;
y = 64;
- } else if (ch_x < 275 && _G(spieler_vector)[P_CHEWY].Xypos[1] > 72) {
+ } else if (ch_x < 275 && _G(moveState)[P_CHEWY].Xypos[1] > 72) {
x = 143;
y = 57;
} else {
diff --git a/engines/chewy/rooms/room51.cpp b/engines/chewy/rooms/room51.cpp
index 7faf09efd4e..6139c5ed399 100644
--- a/engines/chewy/rooms/room51.cpp
+++ b/engines/chewy/rooms/room51.cpp
@@ -184,7 +184,7 @@ void Room51::setup_func() {
}
} else if (_G(gameState)._personRoomNr[P_HOWARD] == 51) {
calc_person_look();
- const int16 ch_y = _G(spieler_vector)[P_CHEWY].Xypos[1];
+ const int16 ch_y = _G(moveState)[P_CHEWY].Xypos[1];
int16 x, y;
if (ch_y < 129) {
diff --git a/engines/chewy/rooms/room52.cpp b/engines/chewy/rooms/room52.cpp
index 58c49584f2e..4df8e0e33ee 100644
--- a/engines/chewy/rooms/room52.cpp
+++ b/engines/chewy/rooms/room52.cpp
@@ -138,7 +138,7 @@ void Room52::kaker_platt() {
void Room52::setup_func() {
if (_G(gameState)._personRoomNr[P_HOWARD] == 52) {
calc_person_look();
- const int16 y = (_G(spieler_vector)[P_CHEWY].Xypos[1] < 97) ? 44 : 87;
+ const int16 y = (_G(moveState)[P_CHEWY].Xypos[1] < 97) ? 44 : 87;
goAutoXy(1, y, P_HOWARD, ANI_GO);
}
}
diff --git a/engines/chewy/rooms/room54.cpp b/engines/chewy/rooms/room54.cpp
index 3e59d736bac..9dbcca09904 100644
--- a/engines/chewy/rooms/room54.cpp
+++ b/engines/chewy/rooms/room54.cpp
@@ -96,7 +96,7 @@ void Room54::setup_func() {
calc_person_look();
if (_G(gameState).R54HowardVorne != 255) {
- const int16 ch_x = _G(spieler_vector)[P_CHEWY].Xypos[0];
+ const int16 ch_x = _G(moveState)[P_CHEWY].Xypos[0];
int16 x, y;
if (_G(gameState).R54HowardVorne) {
if (ch_x < 218) {
diff --git a/engines/chewy/rooms/room55.cpp b/engines/chewy/rooms/room55.cpp
index a6e75fd6282..c5ffe74aa16 100644
--- a/engines/chewy/rooms/room55.cpp
+++ b/engines/chewy/rooms/room55.cpp
@@ -392,7 +392,7 @@ int16 Room55::use_kammeraus() {
void Room55::setup_func() {
if (_G(gameState)._personRoomNr[P_HOWARD] == 55) {
calc_person_look();
- const int16 ch_x = _G(spieler_vector)[P_CHEWY].Xypos[0];
+ const int16 ch_x = _G(moveState)[P_CHEWY].Xypos[0];
int16 x, y;
if (ch_x < 100) {
diff --git a/engines/chewy/rooms/room56.cpp b/engines/chewy/rooms/room56.cpp
index 21492aa0868..207074f3174 100644
--- a/engines/chewy/rooms/room56.cpp
+++ b/engines/chewy/rooms/room56.cpp
@@ -410,8 +410,8 @@ void Room56::setup_func() {
if (_G(gameState)._personRoomNr[P_HOWARD] == 56) {
calc_person_look();
- const int16 ch_x = _G(spieler_vector)[P_CHEWY].Xypos[0];
- const int16 ch_y = _G(spieler_vector)[P_CHEWY].Xypos[1];
+ const int16 ch_x = _G(moveState)[P_CHEWY].Xypos[0];
+ const int16 ch_y = _G(moveState)[P_CHEWY].Xypos[1];
int16 x, y;
if (ch_x < 196) {
x = 23;
diff --git a/engines/chewy/rooms/room57.cpp b/engines/chewy/rooms/room57.cpp
index fe43c78f4f4..02451090474 100644
--- a/engines/chewy/rooms/room57.cpp
+++ b/engines/chewy/rooms/room57.cpp
@@ -64,7 +64,7 @@ void Room57::xit(int16 eib_nr) {
void Room57::setup_func() {
if (_G(gameState)._personRoomNr[P_HOWARD] == 57) {
calc_person_look();
- const int16 ch_y = _G(spieler_vector)[P_CHEWY].Xypos[1];
+ const int16 ch_y = _G(moveState)[P_CHEWY].Xypos[1];
int16 x, y;
if (ch_y < 145) {
x = 176;
diff --git a/engines/chewy/rooms/room58.cpp b/engines/chewy/rooms/room58.cpp
index 7ced52ee9b2..edab1ff7f68 100644
--- a/engines/chewy/rooms/room58.cpp
+++ b/engines/chewy/rooms/room58.cpp
@@ -35,8 +35,8 @@ void Room58::entry() {
void Room58::xit() {
_G(gameState).scrollx = _G(gameState).R58TmpSx;
_G(gameState).scrolly = _G(gameState).R58TmpSy;
- _G(spieler_vector)[P_CHEWY].Xypos[0] = _G(gameState).R58TmpX;
- _G(spieler_vector)[P_CHEWY].Xypos[1] = _G(gameState).R58TmpY;
+ _G(moveState)[P_CHEWY].Xypos[0] = _G(gameState).R58TmpX;
+ _G(moveState)[P_CHEWY].Xypos[1] = _G(gameState).R58TmpY;
_G(spieler_mi)[P_CHEWY].XyzStart[0] = _G(gameState).R58TmpX;
_G(spieler_mi)[P_CHEWY].XyzStart[1] = _G(gameState).R58TmpY;
_G(flags).MainInput = true;
@@ -55,10 +55,10 @@ void Room58::look_cut_mag(int16 r_nr) {
_G(gameState).R58TmpSx = _G(gameState).scrollx;
_G(gameState).R58TmpSy = _G(gameState).scrolly;
- _G(gameState).R58TmpX = _G(spieler_vector)[P_CHEWY].Xypos[0];
- _G(gameState).R58TmpY = _G(spieler_vector)[P_CHEWY].Xypos[1];
- _G(spieler_vector)[P_CHEWY].Xypos[0] = 160;
- _G(spieler_vector)[P_CHEWY].Xypos[1] = 100;
+ _G(gameState).R58TmpX = _G(moveState)[P_CHEWY].Xypos[0];
+ _G(gameState).R58TmpY = _G(moveState)[P_CHEWY].Xypos[1];
+ _G(moveState)[P_CHEWY].Xypos[0] = 160;
+ _G(moveState)[P_CHEWY].Xypos[1] = 100;
_G(gameState).scrollx = 0;
_G(gameState).scrolly = 0;
_G(flags).MainInput = false;
diff --git a/engines/chewy/rooms/room65.cpp b/engines/chewy/rooms/room65.cpp
index 18afdcb9d3b..a60e758c8ca 100644
--- a/engines/chewy/rooms/room65.cpp
+++ b/engines/chewy/rooms/room65.cpp
@@ -37,14 +37,14 @@ void Room65::entry() {
_G(r65tmp_scrolly) = _G(gameState).scrolly;
_G(gameState).scrollx = 0;
_G(gameState).scrolly = 0;
- _G(r65tmp_ch_x) = _G(spieler_vector)[P_CHEWY].Xypos[0];
- _G(r65tmp_ch_y) = _G(spieler_vector)[P_CHEWY].Xypos[1];
- _G(r65tmp_ho_x) = _G(spieler_vector)[P_HOWARD].Xypos[0];
- _G(r65tmp_ho_y) = _G(spieler_vector)[P_HOWARD].Xypos[1];
- _G(spieler_vector)[P_CHEWY].Xypos[0] = 10;
- _G(spieler_vector)[P_CHEWY].Xypos[1] = 80;
- _G(spieler_vector)[P_HOWARD].Xypos[0] = 150;
- _G(spieler_vector)[P_HOWARD].Xypos[1] = 10;
+ _G(r65tmp_ch_x) = _G(moveState)[P_CHEWY].Xypos[0];
+ _G(r65tmp_ch_y) = _G(moveState)[P_CHEWY].Xypos[1];
+ _G(r65tmp_ho_x) = _G(moveState)[P_HOWARD].Xypos[0];
+ _G(r65tmp_ho_y) = _G(moveState)[P_HOWARD].Xypos[1];
+ _G(moveState)[P_CHEWY].Xypos[0] = 10;
+ _G(moveState)[P_CHEWY].Xypos[1] = 80;
+ _G(moveState)[P_HOWARD].Xypos[0] = 150;
+ _G(moveState)[P_HOWARD].Xypos[1] = 10;
if (_G(gameState).PersonDia[P_HOWARD] < 10000) {
_G(cur_hide_flag) = false;
hideCur();
diff --git a/engines/chewy/rooms/room66.cpp b/engines/chewy/rooms/room66.cpp
index 77b89636c06..5490ad49ece 100644
--- a/engines/chewy/rooms/room66.cpp
+++ b/engines/chewy/rooms/room66.cpp
@@ -116,7 +116,7 @@ void Room66::xit(int16 eib_nr) {
void Room66::setup_func() {
calc_person_look();
- const int posX = _G(spieler_vector)[P_CHEWY].Xypos[0];
+ const int posX = _G(moveState)[P_CHEWY].Xypos[0];
int edx, esi;
if (posX < 30) {
diff --git a/engines/chewy/rooms/room67.cpp b/engines/chewy/rooms/room67.cpp
index da6d8e01cf1..35033bec369 100644
--- a/engines/chewy/rooms/room67.cpp
+++ b/engines/chewy/rooms/room67.cpp
@@ -67,7 +67,7 @@ void Room67::setup_func() {
calc_person_look();
const int16 y = 117;
int16 x;
- if (_G(spieler_vector)[P_CHEWY].Xypos[0] > 320) {
+ if (_G(moveState)[P_CHEWY].Xypos[0] > 320) {
x = 178;
} else {
x = 137;
diff --git a/engines/chewy/rooms/room68.cpp b/engines/chewy/rooms/room68.cpp
index 0088a52f78d..6d2f89f1558 100644
--- a/engines/chewy/rooms/room68.cpp
+++ b/engines/chewy/rooms/room68.cpp
@@ -133,7 +133,7 @@ void Room68::setup_func() {
calc_person_look();
int16 ho_y = 75;
int16 ni_y = 75;
- int16 ch_x = _G(spieler_vector)[P_CHEWY].Xypos[0];
+ int16 ch_x = _G(moveState)[P_CHEWY].Xypos[0];
int16 ho_x, ni_x;
if (ch_x < 130) {
@@ -227,8 +227,8 @@ void Room68::talk_keeper() {
startSetAILWait(15, 1, ANI_FRONT);
_G(det)->set_static_ani(16, -1);
showCur();
- int16 x = _G(spieler_vector)[P_CHEWY].Xypos[0] - _G(gameState).scrollx + _G(spieler_mi)[P_CHEWY].HotX;
- int16 y = _G(spieler_vector)[P_CHEWY].Xypos[1] - _G(gameState).scrolly;
+ int16 x = _G(moveState)[P_CHEWY].Xypos[0] - _G(gameState).scrollx + _G(spieler_mi)[P_CHEWY].HotX;
+ int16 y = _G(moveState)[P_CHEWY].Xypos[1] - _G(gameState).scrolly;
_G(atds)->set_split_win(3, x, y);
startAdsWait(20);
_G(cur_hide_flag) = false;
diff --git a/engines/chewy/rooms/room71.cpp b/engines/chewy/rooms/room71.cpp
index 37f8a0ec39e..6a4cec6b281 100644
--- a/engines/chewy/rooms/room71.cpp
+++ b/engines/chewy/rooms/room71.cpp
@@ -116,7 +116,7 @@ void Room71::setup_func() {
}
} else {
- const int posX = _G(spieler_vector)[P_CHEWY].Xypos[0];
+ const int posX = _G(moveState)[P_CHEWY].Xypos[0];
int howDestX, howDestY, nicDestX, nicDestY;
if (posX < 40) {
diff --git a/engines/chewy/rooms/room79.cpp b/engines/chewy/rooms/room79.cpp
index 1b13d584f14..ef3d78b14d6 100644
--- a/engines/chewy/rooms/room79.cpp
+++ b/engines/chewy/rooms/room79.cpp
@@ -65,7 +65,7 @@ void Room79::xit() {
void Room79::setup_func() {
calc_person_look();
- const int posX = _G(spieler_vector)[P_CHEWY].Xypos[0];
+ const int posX = _G(moveState)[P_CHEWY].Xypos[0];
int howDestX, howDestY, nicDestX, nicDestY;
diff --git a/engines/chewy/rooms/room82.cpp b/engines/chewy/rooms/room82.cpp
index 78c9e2f31e5..26ecd8a8701 100644
--- a/engines/chewy/rooms/room82.cpp
+++ b/engines/chewy/rooms/room82.cpp
@@ -90,7 +90,7 @@ void Room82::xit(int16 eib_nr) {
void Room82::setup_func() {
calc_person_look();
- const int posX = _G(spieler_vector)[P_CHEWY].Xypos[0];
+ const int posX = _G(moveState)[P_CHEWY].Xypos[0];
int howDestX, nicDestX;
if (posX < 200) {
@@ -225,7 +225,7 @@ void Room82::proc8() {
startAadWait(447);
autoMove(6, P_CHEWY);
- while (_G(spieler_vector)[P_NICHELLE].Count != 0)
+ while (_G(moveState)[P_NICHELLE].Count != 0)
setupScreen(DO_SETUP);
_G(gameState)._personHide[P_NICHELLE] = true;
diff --git a/engines/chewy/rooms/room84.cpp b/engines/chewy/rooms/room84.cpp
index 94e232019e4..a8808baecf3 100644
--- a/engines/chewy/rooms/room84.cpp
+++ b/engines/chewy/rooms/room84.cpp
@@ -152,7 +152,7 @@ void Room84::setup_func() {
showCur();
}
- const int posX = _G(spieler_vector)[P_CHEWY].Xypos[0];
+ const int posX = _G(moveState)[P_CHEWY].Xypos[0];
int howDestX, nicDestX;
if (posX > 610) {
howDestX = nicDestX = 610;
diff --git a/engines/chewy/rooms/room85.cpp b/engines/chewy/rooms/room85.cpp
index 6875c77f78b..90b0a738119 100644
--- a/engines/chewy/rooms/room85.cpp
+++ b/engines/chewy/rooms/room85.cpp
@@ -126,7 +126,7 @@ void Room85::xit(int16 eib_nr) {
void Room85::setup_func() {
calc_person_look();
- const int xyPos = _G(spieler_vector)[P_CHEWY].Xypos[0];
+ const int xyPos = _G(moveState)[P_CHEWY].Xypos[0];
int howDestX, nicDestX;
if (xyPos > 255) {
diff --git a/engines/chewy/rooms/room86.cpp b/engines/chewy/rooms/room86.cpp
index 69d2a10a620..315ed68baa6 100644
--- a/engines/chewy/rooms/room86.cpp
+++ b/engines/chewy/rooms/room86.cpp
@@ -124,7 +124,7 @@ void Room86::setup_func() {
int howDestX;
int nicDestY = 56;
- int xyPos = _G(spieler_vector)[P_CHEWY].Xypos[0];
+ int xyPos = _G(moveState)[P_CHEWY].Xypos[0];
if (xyPos > 390) {
howDestX = 298;
howDestY = 44;
diff --git a/engines/chewy/rooms/room87.cpp b/engines/chewy/rooms/room87.cpp
index f212d5ce580..0d02775efd5 100644
--- a/engines/chewy/rooms/room87.cpp
+++ b/engines/chewy/rooms/room87.cpp
@@ -60,12 +60,12 @@ void Room87::setup_func() {
int nicDestY = 0;
- if (_G(spieler_vector)[P_CHEWY].Xypos[0] > 186) {
+ if (_G(moveState)[P_CHEWY].Xypos[0] > 186) {
howDestX = 103;
howDestY = 128;
nicDestX = 134;
nicDestY = 123;
- } else if (_G(spieler_vector)[P_CHEWY].Xypos[0] > 20) {
+ } else if (_G(moveState)[P_CHEWY].Xypos[0] > 20) {
howDestX = 27;
howDestY = 98;
nicDestX = -2;
diff --git a/engines/chewy/rooms/room89.cpp b/engines/chewy/rooms/room89.cpp
index f7317d15bde..e3c7edb284d 100644
--- a/engines/chewy/rooms/room89.cpp
+++ b/engines/chewy/rooms/room89.cpp
@@ -155,7 +155,7 @@ void Room89::setup_func() {
calc_person_look();
int destX;
- if (_G(spieler_vector)[P_CHEWY].Xypos[0] >= 230)
+ if (_G(moveState)[P_CHEWY].Xypos[0] >= 230)
destX = 318;
else
destX = 116;
diff --git a/engines/chewy/rooms/room90.cpp b/engines/chewy/rooms/room90.cpp
index 27632a17106..e7a5c182149 100644
--- a/engines/chewy/rooms/room90.cpp
+++ b/engines/chewy/rooms/room90.cpp
@@ -162,7 +162,7 @@ void Room90::setup_func() {
return;
calc_person_look();
- int xyPos = _G(spieler_vector)[P_CHEWY].Xypos[0];
+ int xyPos = _G(moveState)[P_CHEWY].Xypos[0];
int destX;
if (xyPos > 400)
@@ -244,7 +244,7 @@ int Room90::getHubcaps() {
start_spz_wait(43, 1, false, P_CHEWY);
load_chewy_taf(CHEWY_ANI7);
- while (_G(spieler_vector)[P_HOWARD].Xypos[0] != 176) {
+ while (_G(moveState)[P_HOWARD].Xypos[0] != 176) {
setupScreen(DO_SETUP);
SHOULD_QUIT_RETURN0;
}
diff --git a/engines/chewy/rooms/room91.cpp b/engines/chewy/rooms/room91.cpp
index 9b6572fc8a3..73b8d17d8ff 100644
--- a/engines/chewy/rooms/room91.cpp
+++ b/engines/chewy/rooms/room91.cpp
@@ -89,7 +89,7 @@ void Room91::xit(int16 eib_nr) {
void Room91::setup_func() {
if (!_G(gameState).flags34_4) {
calc_person_look();
- const int xyPos = _G(spieler_vector)[0].Xypos[0];
+ const int xyPos = _G(moveState)[0].Xypos[0];
if (xyPos < 130)
goAutoXy(40, 97, P_HOWARD, ANI_GO);
else if (xyPos < 312)
diff --git a/engines/chewy/rooms/room94.cpp b/engines/chewy/rooms/room94.cpp
index 4a2ca09554a..0bf775e8c75 100644
--- a/engines/chewy/rooms/room94.cpp
+++ b/engines/chewy/rooms/room94.cpp
@@ -105,7 +105,7 @@ void Room94::setup_func() {
calc_person_look();
int destX, destY = 122;
- if (_G(spieler_vector)[P_CHEWY].Xypos[0] >= 370)
+ if (_G(moveState)[P_CHEWY].Xypos[0] >= 370)
destX = 399;
else
destX = 255;
diff --git a/engines/chewy/rooms/room95.cpp b/engines/chewy/rooms/room95.cpp
index fc6ebc708c8..759031bba74 100644
--- a/engines/chewy/rooms/room95.cpp
+++ b/engines/chewy/rooms/room95.cpp
@@ -66,7 +66,7 @@ void Room95::xit(int16 eib_nr) {
void Room95::setup_func() {
calc_person_look();
- int posX = _G(spieler_vector)[P_CHEWY].Xypos[0];
+ int posX = _G(moveState)[P_CHEWY].Xypos[0];
int destX;
int destY = 120;
diff --git a/engines/chewy/rooms/room96.cpp b/engines/chewy/rooms/room96.cpp
index 5095545007a..4635a3a5eb7 100644
--- a/engines/chewy/rooms/room96.cpp
+++ b/engines/chewy/rooms/room96.cpp
@@ -60,7 +60,7 @@ void Room96::setup_func() {
calc_person_look();
int destX, destY = 62;
- if (_G(spieler_vector)[P_CHEWY].Xypos[0] >= 120)
+ if (_G(moveState)[P_CHEWY].Xypos[0] >= 120)
destX = 121;
else
destX = 93;
diff --git a/engines/chewy/rooms/room97.cpp b/engines/chewy/rooms/room97.cpp
index d15e90917f5..45718b727e3 100644
--- a/engines/chewy/rooms/room97.cpp
+++ b/engines/chewy/rooms/room97.cpp
@@ -164,7 +164,7 @@ void Room97::setup_func() {
_G(spieler_mi)[P_HOWARD].Vorschub = 6;
_G(spieler_mi)[P_NICHELLE].Vorschub = 4;
- if (_G(gameState).flags35_80 && _G(spieler_vector)->Xypos[P_CHEWY] > 830)
+ if (_G(gameState).flags35_80 && _G(moveState)->Xypos[P_CHEWY] > 830)
setPersonPos(830, 98, P_CHEWY, P_RIGHT);
if (_word18DB2E)
@@ -208,7 +208,7 @@ void Room97::setup_func() {
calc_person_look();
- const int chewyPosX = _G(spieler_vector)[P_CHEWY].Xypos[0];
+ const int chewyPosX = _G(moveState)[P_CHEWY].Xypos[0];
if (!_G(gameState).flags36_80) {
int destX, destY;
@@ -241,7 +241,7 @@ void Room97::setup_func() {
int destX = -1;
int destY = -1;
- const int nichellePosX = _G(spieler_vector)[P_NICHELLE].Xypos[0];
+ const int nichellePosX = _G(moveState)[P_NICHELLE].Xypos[0];
if (chewyPosX > 250 && nichellePosX < 232) {
destX = 232;
destY = 27;
@@ -343,7 +343,7 @@ void Room97::proc4() {
startSetAILWait(9, 1, ANI_FRONT);
_G(det)->showStaticSpr(21);
- while (_G(spieler_vector)[P_HOWARD].Xypos[0] > 996) {
+ while (_G(moveState)[P_HOWARD].Xypos[0] > 996) {
setupScreen(DO_SETUP);
SHOULD_QUIT_RETURN;
}
@@ -386,7 +386,7 @@ int Room97::proc5() {
autoMove(0, P_CHEWY);
auto_scroll(800, 0);
- while (_G(spieler_vector)[P_HOWARD].Xypos[0] < 1080) {
+ while (_G(moveState)[P_HOWARD].Xypos[0] < 1080) {
setupScreen(DO_SETUP);
SHOULD_QUIT_RETURN0;
}
diff --git a/engines/chewy/sprite.cpp b/engines/chewy/sprite.cpp
index 309175fb609..5cc89457fbe 100644
--- a/engines/chewy/sprite.cpp
+++ b/engines/chewy/sprite.cpp
@@ -155,18 +155,18 @@ void spriteEngine() {
case ZOBJ_CHEWY:
if (!_G(gameState)._personHide[P_CHEWY]) {
if (!_G(spz_ani)[P_CHEWY]) {
- int16 sprNr = _G(chewy_ph)[_G(spieler_vector)[P_CHEWY].Phase * 8 + _G(spieler_vector)[P_CHEWY].PhNr];
+ int16 sprNr = _G(chewy_ph)[_G(moveState)[P_CHEWY].Phase * 8 + _G(moveState)[P_CHEWY].PhNr];
x = _G(spieler_mi)[P_CHEWY].XyzStart[0] + _G(chewy_kor)[sprNr * 2] - _G(gameState).scrollx;
y = _G(spieler_mi)[P_CHEWY].XyzStart[1] + _G(chewy_kor)[sprNr * 2 + 1] - _G(gameState).scrolly;
calc_zoom(_G(spieler_mi)[P_CHEWY].XyzStart[1], (int16)_G(room)->_roomInfo->_zoomFactor,
- (int16)_G(room)->_roomInfo->_zoomFactor, &_G(spieler_vector)[P_CHEWY]);
+ (int16)_G(room)->_roomInfo->_zoomFactor, &_G(moveState)[P_CHEWY]);
_G(out)->scale_set(_G(chewy)->image[sprNr], x, y,
- _G(spieler_vector)[P_CHEWY].Xzoom,
- _G(spieler_vector)[P_CHEWY].Yzoom,
+ _G(moveState)[P_CHEWY].Xzoom,
+ _G(moveState)[P_CHEWY].Yzoom,
_G(scr_width));
} else {
- int16 sprNr = _G(spz_spr_nr)[_G(spieler_vector)[P_CHEWY].PhNr];
+ int16 sprNr = _G(spz_spr_nr)[_G(moveState)[P_CHEWY].PhNr];
x = _G(spieler_mi)[P_CHEWY].XyzStart[0] + _G(spz_tinfo)->correction[sprNr * 2] -
_G(gameState).scrollx;
y = _G(spieler_mi)[P_CHEWY].XyzStart[1] + _G(spz_tinfo)->correction[sprNr * 2 + 1] -
@@ -174,11 +174,11 @@ void spriteEngine() {
calc_zoom(_G(spieler_mi)[P_CHEWY].XyzStart[1],
(int16)_G(room)->_roomInfo->_zoomFactor,
(int16)_G(room)->_roomInfo->_zoomFactor,
- &_G(spieler_vector)[P_CHEWY]);
+ &_G(moveState)[P_CHEWY]);
_G(out)->scale_set(_G(spz_tinfo)->image[sprNr], x, y,
- _G(spieler_vector)[P_CHEWY].Xzoom,
- _G(spieler_vector)[P_CHEWY].Yzoom,
+ _G(moveState)[P_CHEWY].Xzoom,
+ _G(moveState)[P_CHEWY].Yzoom,
_G(scr_width));
}
}
@@ -191,16 +191,16 @@ void spriteEngine() {
int16 sprNr;
if (!_G(spz_ani)[personNr]) {
ts_info = _G(PersonTaf)[personNr];
- sprNr = _G(PersonSpr)[personNr][_G(spieler_vector)[personNr].PhNr];
+ sprNr = _G(PersonSpr)[personNr][_G(moveState)[personNr].PhNr];
} else {
ts_info = _G(spz_tinfo);
- sprNr = _G(spz_spr_nr)[_G(spieler_vector)[personNr].PhNr];
+ sprNr = _G(spz_spr_nr)[_G(moveState)[personNr].PhNr];
}
x = _G(spieler_mi)[personNr].XyzStart[0] + ts_info->correction[sprNr * 2] - _G(gameState).scrollx;
y = _G(spieler_mi)[personNr].XyzStart[1] + ts_info->correction[sprNr * 2 + 1] - _G(gameState).scrolly;
- calc_zoom(_G(spieler_mi)[personNr].XyzStart[1], _G(gameState).ZoomXy[personNr][0],_G(gameState).ZoomXy[personNr][1], &_G(spieler_vector)[personNr]);
- _G(out)->scale_set(ts_info->image[sprNr], x, y, _G(spieler_vector)[personNr].Xzoom, _G(spieler_vector)[personNr].Yzoom, _G(scr_width));
+ calc_zoom(_G(spieler_mi)[personNr].XyzStart[1], _G(gameState).ZoomXy[personNr][0],_G(gameState).ZoomXy[personNr][1], &_G(moveState)[personNr]);
+ _G(out)->scale_set(ts_info->image[sprNr], x, y, _G(moveState)[personNr].Xzoom, _G(moveState)[personNr].Yzoom, _G(scr_width));
}
}
break;
@@ -238,9 +238,9 @@ void calc_z_ebene() {
if (_G(gameState)._personRoomNr[P_CHEWY + i] == _G(gameState)._personRoomNr[P_CHEWY] &&
_G(spieler_mi)[P_CHEWY + i].Id != NO_MOV_OBJ) {
_G(z_obj_sort)[_G(z_count)].ObjArt = ZOBJ_CHEWY + i;
- _G(z_obj_sort)[_G(z_count)].ObjZ = _G(spieler_vector)[P_CHEWY + i].Xypos[1] +
+ _G(z_obj_sort)[_G(z_count)].ObjZ = _G(moveState)[P_CHEWY + i].Xypos[1] +
_G(spieler_mi)[P_CHEWY + i].HotMovY
- - abs(_G(spieler_vector)[P_CHEWY + i].Yzoom);
+ - abs(_G(moveState)[P_CHEWY + i].Yzoom);
++_G(z_count);
}
}
@@ -304,23 +304,23 @@ int16 mouse_on_prog_ani() {
void setPersonPos(int16 x, int16 y, int16 personNr, int16 direction) {
if (direction != -1)
setPersonSpr(direction, personNr);
- _G(spieler_vector)[personNr].Xypos[0] = x;
- _G(spieler_vector)[personNr].Xypos[1] = y;
+ _G(moveState)[personNr].Xypos[0] = x;
+ _G(moveState)[personNr].Xypos[1] = y;
_G(spieler_mi)[personNr].XyzStart[0] = x;
_G(spieler_mi)[personNr].XyzStart[1] = y;
- _G(spieler_vector)[personNr].Count = 0;
- _G(spieler_vector)[personNr].Delay = _G(gameState).DelaySpeed;
- _G(spieler_vector)[personNr]._delayCount = 0;
+ _G(moveState)[personNr].Count = 0;
+ _G(moveState)[personNr].Delay = _G(gameState).DelaySpeed;
+ _G(moveState)[personNr]._delayCount = 0;
calc_zoom(_G(spieler_mi)[personNr].XyzStart[1],
_G(gameState).ZoomXy[personNr][0],
_G(gameState).ZoomXy[personNr][1],
- &_G(spieler_vector)[personNr]);
+ &_G(moveState)[personNr]);
int16 tmpNr = personNr;
if (personNr >= P_NICHELLE) {
++tmpNr;
}
- int16 x1 = _G(spieler_vector)[personNr].Xypos[0] - _G(gameState).scrollx + _G(spieler_mi)[personNr].HotX;
- int16 y1 = _G(spieler_vector)[personNr].Xypos[1] - _G(gameState).scrolly;
+ int16 x1 = _G(moveState)[personNr].Xypos[0] - _G(gameState).scrollx + _G(spieler_mi)[personNr].HotX;
+ int16 y1 = _G(moveState)[personNr].Xypos[1] - _G(gameState).scrolly;
_G(atds)->set_split_win(tmpNr, x1, y1);
if (!_G(flags).ExitMov && personNr == P_CHEWY) {
const int16 paletteId = _G(barriers)->getBarrierId(x + _G(spieler_mi)[personNr].HotX, y + _G(spieler_mi)[personNr].HotY);
@@ -338,16 +338,16 @@ void setPersonSpr(int16 nr, int16 personNr) {
case P_CHEWY:
switch (nr) {
case P_LEFT:
- _G(spieler_vector)[P_CHEWY].Phase = CH_L_STEHEN;
- _G(spieler_vector)[P_CHEWY].PhNr = 0;
- _G(spieler_vector)[P_CHEWY].PhAnz = _G(chewy_ph_nr)[CH_L_STEHEN];
+ _G(moveState)[P_CHEWY].Phase = CH_L_STEHEN;
+ _G(moveState)[P_CHEWY].PhNr = 0;
+ _G(moveState)[P_CHEWY].PhAnz = _G(chewy_ph_nr)[CH_L_STEHEN];
_G(person_end_phase)[P_CHEWY] = P_LEFT;
break;
case P_RIGHT:
- _G(spieler_vector)[P_CHEWY].Phase = CH_R_STEHEN;
- _G(spieler_vector)[P_CHEWY].PhNr = 0;
- _G(spieler_vector)[P_CHEWY].PhAnz = _G(chewy_ph_nr)[CH_R_STEHEN];
+ _G(moveState)[P_CHEWY].Phase = CH_R_STEHEN;
+ _G(moveState)[P_CHEWY].PhNr = 0;
+ _G(moveState)[P_CHEWY].PhAnz = _G(chewy_ph_nr)[CH_R_STEHEN];
_G(person_end_phase)[P_CHEWY] = P_RIGHT;
break;
@@ -360,21 +360,21 @@ void setPersonSpr(int16 nr, int16 personNr) {
case P_NICHELLE:
#define HO_L_STEHEN 0
#define HO_R_STEHEN 0
- _G(spieler_vector)[personNr].PhNr = 0;
- _G(spieler_vector)[personNr].PhAnz = 8;
+ _G(moveState)[personNr].PhNr = 0;
+ _G(moveState)[personNr].PhAnz = 8;
_G(person_end_phase)[personNr] = P_LEFT;
switch (nr) {
case P_LEFT:
- _G(spieler_vector)[personNr].Phase = HO_L_STEHEN;
- _G(spieler_vector)[personNr].PhNr = 0;
- _G(spieler_vector)[personNr].PhAnz = 8;
+ _G(moveState)[personNr].Phase = HO_L_STEHEN;
+ _G(moveState)[personNr].PhNr = 0;
+ _G(moveState)[personNr].PhAnz = 8;
_G(person_end_phase)[personNr] = P_LEFT;
break;
case P_RIGHT:
- _G(spieler_vector)[personNr].Phase = HO_R_STEHEN;
- _G(spieler_vector)[personNr].PhNr = 0;
- _G(spieler_vector)[personNr].PhAnz = 8;
+ _G(moveState)[personNr].Phase = HO_R_STEHEN;
+ _G(moveState)[personNr].PhNr = 0;
+ _G(moveState)[personNr].PhAnz = 8;
_G(person_end_phase)[personNr] = P_RIGHT;
break;
@@ -390,7 +390,7 @@ void setPersonSpr(int16 nr, int16 personNr) {
void stopPerson(int16 personNr) {
_G(mov)->stop_auto_go();
- _G(spieler_vector)[personNr].Count = 0;
+ _G(moveState)[personNr].Count = 0;
}
@@ -501,7 +501,7 @@ bool startAtsWait(int16 txtNr, int16 txtMode, int16 col, int16 mode) {
shown = _G(atds)->start_ats(txtNr, txtMode, col, mode, &vocNr);
if (g_engine->_sound->speechEnabled()) {
- const int16 vocx = _G(spieler_vector)[P_CHEWY].Xypos[0] - _G(gameState).scrollx + _G(spieler_mi)[P_CHEWY].HotX;
+ const int16 vocx = _G(moveState)[P_CHEWY].Xypos[0] - _G(gameState).scrollx + _G(spieler_mi)[P_CHEWY].HotX;
g_engine->_sound->setSoundChannelBalance(0, _G(atds)->getStereoPos(vocx));
if (vocNr >= 0) {
@@ -559,8 +559,8 @@ void aadWait(int16 strNr) {
void start_aad(int16 diaNr, int16 ssiNr) {
if (ssiNr == 0) {
- int16 x = _G(spieler_vector)[P_CHEWY].Xypos[0] - _G(gameState).scrollx + _G(spieler_mi)[P_CHEWY].HotX;
- int16 y = _G(spieler_vector)[P_CHEWY].Xypos[1] - _G(gameState).scrolly;
+ int16 x = _G(moveState)[P_CHEWY].Xypos[0] - _G(gameState).scrollx + _G(spieler_mi)[P_CHEWY].HotX;
+ int16 y = _G(moveState)[P_CHEWY].Xypos[1] - _G(gameState).scrolly;
_G(atds)->set_split_win(0, x, y);
}
@@ -1066,11 +1066,11 @@ bool start_spz(int16 ani_id, int16 count, bool reverse, int16 p_nr) {
_G(spz_start) = spr_start;
_G(spz_delay)[p_nr] = _G(SpzDelay);
- _G(spieler_vector)[p_nr].Count = 0;
- _G(spieler_vector)[p_nr].PhNr = 0;
- _G(spieler_vector)[p_nr].PhAnz = spr_anz;
- _G(spieler_vector)[p_nr].Delay = _G(gameState).DelaySpeed + _G(spz_delay)[p_nr];
- _G(spieler_vector)[p_nr]._delayCount = 0;
+ _G(moveState)[p_nr].Count = 0;
+ _G(moveState)[p_nr].PhNr = 0;
+ _G(moveState)[p_nr].PhAnz = spr_anz;
+ _G(moveState)[p_nr].Delay = _G(gameState).DelaySpeed + _G(spz_delay)[p_nr];
+ _G(moveState)[p_nr]._delayCount = 0;
_G(spz_count) = count;
_G(flags).MouseLeft = true;
ret = true;
@@ -1098,8 +1098,8 @@ void stop_spz() {
_G(flags).SpzAni = false;
_G(flags).MouseLeft = false;
_G(spz_ani)[_G(spz_p_nr)] = false;
- _G(spieler_vector)[_G(spz_p_nr)].Count = 0;
- _G(spieler_vector)[_G(spz_p_nr)].PhNr = 0;
+ _G(moveState)[_G(spz_p_nr)].Count = 0;
+ _G(moveState)[_G(spz_p_nr)].PhNr = 0;
setPersonSpr(_G(person_end_phase)[_G(spz_p_nr)], _G(spz_p_nr));
_G(spz_delay)[_G(spz_p_nr)] = 0;
}
@@ -1117,8 +1117,8 @@ void load_person_ani(int16 ani_id, int16 p_nr) {
if (_G(PersonTaf)[p_nr])
free((char *)_G(PersonTaf)[p_nr]);
_G(PersonTaf)[p_nr] = _G(mem)->taf_seq_adr(ani_start, ani_anz);
- _G(spieler_vector)[p_nr].PhNr = 0;
- _G(spieler_vector)[p_nr].PhAnz = ani_anz;
+ _G(moveState)[p_nr].PhNr = 0;
+ _G(moveState)[p_nr].PhAnz = ani_anz;
}
}
@@ -1141,15 +1141,15 @@ void calc_person_ani() {
for (int16 i = 0; i < 8; i++)
_G(PersonSpr)[p_nr][i] = i;
- if (!_G(spieler_vector)[p_nr].Count &&
+ if (!_G(moveState)[p_nr].Count &&
_G(auto_p_nr) != p_nr) {
ani_nr = (int16)p_ani[p_nr - 1][4] + (_G(person_end_phase)[p_nr] * 4);
- _G(spieler_vector)[p_nr].PhAnz = 5;
+ _G(moveState)[p_nr].PhAnz = 5;
_G(PersonSpr)[p_nr][3] = 1;
_G(PersonSpr)[p_nr][4] = 0;
} else {
- switch (_G(spieler_vector)[p_nr].Phase) {
+ switch (_G(moveState)[p_nr].Phase) {
case CH_LEFT_NO:
ani_nr = (int16)p_ani[p_nr - 1][0];
break;
diff --git a/engines/chewy/t_event.cpp b/engines/chewy/t_event.cpp
index ffdd9cea7bb..b015c7c02c3 100644
--- a/engines/chewy/t_event.cpp
+++ b/engines/chewy/t_event.cpp
@@ -58,8 +58,8 @@ void setSsiPos() {
for (int16 i = 0; i < MAX_PERSON; i++) {
if (i >= P_NICHELLE)
tmp = 1;
- int16 x = _G(spieler_vector)[i].Xypos[0] - _G(gameState).scrollx + _G(spieler_mi)[i].HotX;
- int16 y = _G(spieler_vector)[i].Xypos[1] - _G(gameState).scrolly;
+ int16 x = _G(moveState)[i].Xypos[0] - _G(gameState).scrollx + _G(spieler_mi)[i].HotX;
+ int16 y = _G(moveState)[i].Xypos[1] - _G(gameState).scrolly;
_G(atds)->set_split_win(i + tmp, x, y);
}
}
diff --git a/engines/chewy/video/video_player.cpp b/engines/chewy/video/video_player.cpp
index 7e91c0cc485..47e3764fd9c 100644
--- a/engines/chewy/video/video_player.cpp
+++ b/engines/chewy/video/video_player.cpp
@@ -255,12 +255,12 @@ bool VideoPlayer::handleCustom(uint num, uint frame, CfoDecoder *cfoDecoder) {
break;
case FCUT_078: {
// Room64::cut_sev
- const int16 spr_nr = _G(chewy_ph)[_G(spieler_vector)[P_CHEWY].Phase * 8 + _G(spieler_vector)[P_CHEWY].PhNr];
+ const int16 spr_nr = _G(chewy_ph)[_G(moveState)[P_CHEWY].Phase * 8 + _G(moveState)[P_CHEWY].PhNr];
const int16 x = _G(spieler_mi)[P_CHEWY].XyzStart[0] + _G(chewy_kor)[spr_nr * 2] - scrollx;
const int16 y = _G(spieler_mi)[P_CHEWY].XyzStart[1] + _G(chewy_kor)[spr_nr * 2 + 1] - scrolly;
- calc_zoom(_G(spieler_mi)[P_CHEWY].XyzStart[1], (int16)_G(room)->_roomInfo->_zoomFactor, (int16)_G(room)->_roomInfo->_zoomFactor, &_G(spieler_vector)[P_CHEWY]);
- _G(out)->scale_set(_G(chewy)->image[spr_nr], x, y, _G(spieler_vector)[P_CHEWY].Xzoom, _G(spieler_vector)[P_CHEWY].Yzoom, _G(scr_width));
+ calc_zoom(_G(spieler_mi)[P_CHEWY].XyzStart[1], (int16)_G(room)->_roomInfo->_zoomFactor, (int16)_G(room)->_roomInfo->_zoomFactor, &_G(moveState)[P_CHEWY]);
+ _G(out)->scale_set(_G(chewy)->image[spr_nr], x, y, _G(moveState)[P_CHEWY].Xzoom, _G(moveState)[P_CHEWY].Yzoom, _G(scr_width));
}
break;
case FCUT_083:
Commit: e5b9c4501136657eee06a7b40ce26d9c79ff4349
https://github.com/scummvm/scummvm/commit/e5b9c4501136657eee06a7b40ce26d9c79ff4349
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2022-06-14T01:52:22+03:00
Commit Message:
CHEWY: Refactor room music code
Changed paths:
R engines/chewy/m_event.cpp
engines/chewy/dialogs/files.cpp
engines/chewy/dialogs/main_menu.cpp
engines/chewy/dialogs/options.cpp
engines/chewy/globals.h
engines/chewy/inits.cpp
engines/chewy/main.cpp
engines/chewy/module.mk
engines/chewy/r_event.cpp
engines/chewy/rooms/room37.cpp
engines/chewy/rooms/room68.cpp
engines/chewy/sound.cpp
engines/chewy/sound.h
engines/chewy/video/cfo_decoder.cpp
engines/chewy/video/video_player.cpp
diff --git a/engines/chewy/dialogs/files.cpp b/engines/chewy/dialogs/files.cpp
index 16abc9ce972..bedf06f4c9b 100644
--- a/engines/chewy/dialogs/files.cpp
+++ b/engines/chewy/dialogs/files.cpp
@@ -261,7 +261,6 @@ enter:
const int16 slotNum = text_off + active_slot;
for (uint j = 0; j < saveList.size(); ++j) {
if (saveList[j].getSaveSlot() == slotNum) {
- _G(currentSong) = -1;
_G(cur)->hide_cur();
g_engine->loadGameState(slotNum);
key = Common::KEYCODE_ESCAPE;
diff --git a/engines/chewy/dialogs/main_menu.cpp b/engines/chewy/dialogs/main_menu.cpp
index 4926f54b060..e17691d0f50 100644
--- a/engines/chewy/dialogs/main_menu.cpp
+++ b/engines/chewy/dialogs/main_menu.cpp
@@ -68,8 +68,7 @@ void MainMenu::execute() {
_G(gameState)._personRoomNr[P_CHEWY] = 98;
_G(room)->loadRoom(&_G(room_blk), 98, &_G(gameState));
- _G(currentSong) = -1;
- load_room_music(98);
+ g_engine->_sound->playRoomMusic(98);
_G(fx)->border(_G(workpage), 100, 0, 0);
_G(out)->setPalette(_G(pal));
diff --git a/engines/chewy/dialogs/options.cpp b/engines/chewy/dialogs/options.cpp
index 3defc8f9cb1..acbee3fb1eb 100644
--- a/engines/chewy/dialogs/options.cpp
+++ b/engines/chewy/dialogs/options.cpp
@@ -174,8 +174,7 @@ void Options::execute(TafInfo *ti) {
g_engine->_sound->stopMusic();
} else {
g_engine->_sound->toggleMusic(true);
- _G(currentSong) = -1;
- load_room_music(_G(gameState)._personRoomNr[P_CHEWY]);
+ g_engine->_sound->playRoomMusic(_G(gameState)._personRoomNr[P_CHEWY]);
}
break;
case 6:
diff --git a/engines/chewy/globals.h b/engines/chewy/globals.h
index 039301ff069..54d19acbad7 100644
--- a/engines/chewy/globals.h
+++ b/engines/chewy/globals.h
@@ -153,7 +153,6 @@ public:
int16 _talk_start_ani = -1;
int16 _talk_hide_static = -1;
- int16 _currentSong = -1;
bool _savegameFlag = false;
int _timer_action_ctr = 0;
@@ -531,8 +530,6 @@ void load_person_ani(int16 ani_id, int16 p_nr);
void calc_person_ani();
-void load_room_music(int16 room_nr);
-
} // namespace Chewy
#endif
diff --git a/engines/chewy/inits.cpp b/engines/chewy/inits.cpp
index 4cef3f5a517..aa5b77b6468 100644
--- a/engines/chewy/inits.cpp
+++ b/engines/chewy/inits.cpp
@@ -137,7 +137,6 @@ void var_init() {
_G(gpkt).Vorschub = _G(spieler_mi)[P_CHEWY].Vorschub;
init_room();
_G(gameState).FramesPerSecond = 7;
- _G(currentSong) = -1;
_G(SetUpScreenFunc) = nullptr;
_G(pfeil_delay) = 0;
_G(pfeil_ani) = 0;
diff --git a/engines/chewy/m_event.cpp b/engines/chewy/m_event.cpp
deleted file mode 100644
index 64d117dd689..00000000000
--- a/engines/chewy/m_event.cpp
+++ /dev/null
@@ -1,256 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "chewy/defines.h"
-#include "chewy/globals.h"
-#include "chewy/sound.h"
-
-namespace Chewy {
-
-#define NORMAL_PLAY 0
-#define SEQUENCE_PLAY 1
-#define PATTERN_PLAY 2
-
-void load_room_music(int16 room_nr) {
- int16 musicIndex = -1;
- if (!g_engine->_sound->musicEnabled())
- return;
-
- switch (room_nr) {
- case 0:
- musicIndex = 13;
- break;
- case 1:
- case 18:
- case 90:
- musicIndex = 17;
- break;
- case 2:
- case 88:
- musicIndex = 43;
- break;
- case 3:
- case 4:
- musicIndex = 0;
- break;
- case 5:
- case 8:
- case 12:
- case 86:
- musicIndex = 14;
- break;
- case 6:
- musicIndex = 1;
- break;
- case 7:
- case 97:
- musicIndex = 18;
- break;
- case 9:
- case 10:
- case 47:
- case 87:
- musicIndex = 20;
- break;
- case 11:
- musicIndex = 19;
- break;
- case 13:
- musicIndex = -1;
- break;
- case 14:
- musicIndex = 19;
- break;
- case 15:
- case 16:
- case 19:
- case 96:
- musicIndex = 16;
- break;
- case 21:
- musicIndex = 2;
- break;
- case 22:
- musicIndex = 48;
- break;
- case 25:
- case 26:
- musicIndex = 11;
- break;
- case 27:
- case 30:
- case 54:
- case 63:
- musicIndex = 33;
- break;
- case 28:
- case 29:
- musicIndex = 47;
- break;
- case 31:
- case 35:
- musicIndex = 9;
- break;
- case 32:
- case 40:
- case 71:
- case 89:
- case 92:
- musicIndex = 38;
- break;
- case 33:
- musicIndex = 35;
- break;
- case 37:
- musicIndex = 8;
- break;
- case 39:
- musicIndex = 9;
- break;
- case 41:
- case 77:
- case 78:
- case 83:
- case 93:
- musicIndex = -1;
- break;
- case 42:
- musicIndex = 41;
- break;
- case 45:
- musicIndex = 44;
- break;
- case 46:
- case 50:
- case 73:
- case 74:
- musicIndex = 21;
- break;
- case 48:
- musicIndex = 22;
- break;
- case 49:
- musicIndex = 3;
- break;
- case 51:
- case 52:
- musicIndex = 27;
- break;
- case 53:
- musicIndex = 26;
- break;
- case 55:
- case 57:
- musicIndex = 23;
- break;
- case 56:
- // TODO: Extra checks for two flags
- //if ( (spieler.flags32 & SpielerFlags32_10) != 0 && spieler.flags33 >= 0 ) {
- musicIndex = 52;
- //} else {
- // musicIndex = 7;
- //}
- break;
- case 62:
- musicIndex = 25;
- break;
- case 64:
- musicIndex = 51;
- break;
- case 66:
- case 68:
- musicIndex = 34;
- break;
- case 67:
- case 69:
- case 70:
- case 75:
- musicIndex = 28;
- break;
- case 72:
- musicIndex = 31;
- break;
- case 76:
- musicIndex = 46;
- break;
- case 79:
- musicIndex = 6;
- break;
- case 80:
- musicIndex = 29;
- break;
- case 81:
- musicIndex = 45;
- break;
- case 82:
- musicIndex = 50;
- break;
- case 84:
- musicIndex = 24;
- break;
- case 85:
- musicIndex = 32;
- break;
- case 91:
- musicIndex = 36;
- break;
- case 94:
- case 95:
- musicIndex = 40;
- break;
- case 98:
- musicIndex = 4;
- break;
- case 255:
- musicIndex = 5;
- break;
- case 256:
- musicIndex = 10;
- break;
- case 257:
- musicIndex = 52;
- break;
- case 258:
- musicIndex = 53;
- break;
- case 259:
- musicIndex = 54;
- break;
- case 260:
- musicIndex = 24;
- break;
- default:
- musicIndex = -1;
- _G(currentSong) = -1;
- g_engine->_sound->stopMusic();
- break;
- }
-
- // The original changed the volume here,
- // but we try to maintain a stable volume
- if (musicIndex != _G(currentSong)) {
- g_engine->_sound->stopMusic();
- _G(currentSong) = musicIndex;
- g_engine->_sound->playMusic(musicIndex, true);
- }
-}
-
-} // namespace Chewy
diff --git a/engines/chewy/main.cpp b/engines/chewy/main.cpp
index b84e819a866..9c27b65a7d3 100644
--- a/engines/chewy/main.cpp
+++ b/engines/chewy/main.cpp
@@ -1830,7 +1830,6 @@ void calc_auto_go() {
void hide_person() {
for (int16 i = 0; i < MAX_PERSON; i++) {
-
if (!_G(gameState)._personHide[i]) {
_G(gameState)._personHide[i] = true;
_G(person_tmp_hide)[i] = true;
diff --git a/engines/chewy/module.mk b/engines/chewy/module.mk
index 5656ba206c7..d8b77a1d456 100644
--- a/engines/chewy/module.mk
+++ b/engines/chewy/module.mk
@@ -11,7 +11,6 @@ MODULE_OBJS = \
events.o \
globals.o \
inits.o \
- m_event.o \
main.o \
mouse.o \
mcga_graphics.o \
diff --git a/engines/chewy/r_event.cpp b/engines/chewy/r_event.cpp
index d68a7213b67..a1166efa23e 100644
--- a/engines/chewy/r_event.cpp
+++ b/engines/chewy/r_event.cpp
@@ -173,7 +173,7 @@ void check_ged_action(int16 index) {
}
void enter_room(int16 eib_nr) {
- load_room_music(_G(gameState)._personRoomNr[P_CHEWY]);
+ g_engine->_sound->playRoomMusic(_G(gameState)._personRoomNr[P_CHEWY]);
load_chewy_taf(_G(gameState).ChewyAni);
_G(atds)->stopAad();
_G(atds)->stop_ats();
@@ -667,11 +667,11 @@ static void playIntroSequence() {
for (int i = 0; i < 29 && ret != -1; ++i) {
if (introVideo[i] == FCUT_135)
- load_room_music(258);
+ g_engine->_sound->playRoomMusic(258);
else if (introVideo[i] == FCUT_148)
- load_room_music(259);
+ g_engine->_sound->playRoomMusic(259);
else if (introVideo[i] == FCUT_143)
- load_room_music(260);
+ g_engine->_sound->playRoomMusic(260);
if (introDialog[i] != -1)
start_aad(introDialog[i], -1);
@@ -729,7 +729,7 @@ void flic_cut(int16 nr) {
break;
case FCUT_058:
- load_room_music(255);
+ g_engine->_sound->playRoomMusic(255);
g_engine->_video->playVideo(FCUT_058);
g_engine->_video->playVideo(FCUT_059);
@@ -750,10 +750,8 @@ void flic_cut(int16 nr) {
case FCUT_065:
g_engine->_sound->stopMusic();
- _G(currentSong) = -1;
- load_room_music(256);
+ g_engine->_sound->playRoomMusic(256);
Room46::kloppe();
- _G(currentSong) = -1;
break;
case FCUT_112:
@@ -794,7 +792,7 @@ void flic_cut(int16 nr) {
g_engine->_sound->setMusicVolume(_G(gameState).MusicVol * Audio::Mixer::kMaxChannelVolume / 120);
if (nr != FCUT_135) {
- load_room_music(_G(gameState)._personRoomNr[0]);
+ g_engine->_sound->playRoomMusic(_G(gameState)._personRoomNr[0]);
if (g_engine->_sound->speechEnabled())
_G(det)->enable_room_sound();
diff --git a/engines/chewy/rooms/room37.cpp b/engines/chewy/rooms/room37.cpp
index d2e98918181..22258932087 100644
--- a/engines/chewy/rooms/room37.cpp
+++ b/engines/chewy/rooms/room37.cpp
@@ -268,7 +268,7 @@ void Room37::use_hahn() {
_G(gameState).R37Kloppe = true;
hideCur();
autoMove(6, P_CHEWY);
- load_room_music(256);
+ g_engine->_sound->playRoomMusic(256);
_G(room)->set_timer_status(7, TIMER_STOP);
_G(det)->stop_detail(7);
_G(det)->del_static_ani(7);
diff --git a/engines/chewy/rooms/room68.cpp b/engines/chewy/rooms/room68.cpp
index 6d2f89f1558..0f9dd860ea4 100644
--- a/engines/chewy/rooms/room68.cpp
+++ b/engines/chewy/rooms/room68.cpp
@@ -418,8 +418,7 @@ void Room68::kostuem_aad(int16 aad_nr) {
setPersonPos(150, -13, P_NICHELLE, P_RIGHT);
if (g_engine->_sound->subtitlesEnabled()) {
- _G(currentSong) = -1;
- load_room_music(_G(gameState)._personRoomNr[0]);
+ g_engine->_sound->playRoomMusic(_G(gameState)._personRoomNr[0]);
}
}
showCur();
diff --git a/engines/chewy/sound.cpp b/engines/chewy/sound.cpp
index 5c7b56b6714..e5f69f964dd 100644
--- a/engines/chewy/sound.cpp
+++ b/engines/chewy/sound.cpp
@@ -122,18 +122,20 @@ void Sound::setSoundChannelBalance(uint channel, int8 balance) {
_mixer->setChannelBalance(_soundHandle[channel], balance);
}
-void Sound::playMusic(int num, bool loop) {
+void Sound::playMusic(int16 num, bool loop) {
uint32 musicNum = _soundRes->getChunkCount() - 1 - num;
Chunk *chunk = _soundRes->getChunk(musicNum);
uint8 *data = _soundRes->getChunkData(musicNum);
+ _curMusic = num;
- playMusic(data, chunk->size, loop);
+ playMusic(data, chunk->size);
delete[] data;
}
-void Sound::playMusic(uint8 *data, uint32 size, bool loop, DisposeAfterUse::Flag dispose) {
+void Sound::playMusic(uint8 *data, uint32 size) {
TMFStream *stream = new TMFStream(new Common::MemoryReadStream(data, size), 0);
+ _curMusic = -1;
_mixer->playStream(Audio::Mixer::kMusicSoundType, &_musicHandle, stream);
}
@@ -147,6 +149,7 @@ void Sound::resumeMusic() {
}
void Sound::stopMusic() {
+ _curMusic = -1;
_mixer->stopHandle(_musicHandle);
}
@@ -251,4 +254,55 @@ void Sound::toggleSubtitles(bool enable) {
return ConfMan.setBool("subtitles", enable);
}
+struct RoomMusic {
+ int16 room;
+ int16 music;
+};
+
+const RoomMusic roomMusic[] = {
+ { 0, 13 }, { 1, 17 }, { 18, 17 }, { 90, 17 }, { 2, 43 },
+ { 88, 43 }, { 3, 0 }, { 4, 0 }, { 5, 14 }, { 8, 14 },
+ { 12, 14 }, { 86, 14 }, { 6, 1 }, { 7, 18 }, { 97, 18 },
+ { 9, 20 }, { 10, 20 }, { 47, 20 }, { 87, 20 }, { 11, 19 },
+ { 14, 19 }, { 15, 16 }, { 16, 16 }, { 19, 16 }, { 96, 16 },
+ { 21, 2 }, { 22, 48 }, { 25, 11 }, { 26, 11 }, { 27, 33 },
+ { 30, 33 }, { 54, 33 }, { 63, 33 }, { 28, 47 }, { 29, 47 },
+ { 31, 9 }, { 35, 9 }, { 32, 38 }, { 40, 38 }, { 71, 38 },
+ { 89, 38 }, { 92, 38 }, { 33, 35 }, { 37, 8 }, { 39, 9 },
+ { 42, 41 }, { 45, 44 }, { 46, 21 }, { 50, 21 }, { 73, 21 },
+ { 74, 21 }, { 48, 22 }, { 49, 3 }, { 51, 27 }, { 52, 27 },
+ { 53, 26 }, { 55, 23 }, { 57, 23 }, { 56, 52 }, { 62, 25 },
+ { 64, 51 }, { 66, 34 }, { 68, 34 }, { 67, 28 }, { 69, 28 },
+ { 70, 28 }, { 75, 28 }, { 72, 31 }, { 76, 46 }, { 79, 6 },
+ { 80, 29 }, { 81, 45 }, { 82, 50 }, { 84, 24 }, { 85, 32 },
+ { 91, 36 }, { 94, 40 }, { 95, 40 }, { 98, 4 }, { 255, 5 },
+ { 256, 10 }, { 257, 52 }, { 258, 53 }, { 259, 54 }, { 260, 24 },
+ { -1, -1 }
+};
+
+void Sound::playRoomMusic(int16 roomNum) {
+ int16 musicIndex = -1;
+ if (!musicEnabled())
+ return;
+
+ for (const RoomMusic *cur = roomMusic; cur->room >= 0; ++cur) {
+ if (cur->room == roomNum) {
+ musicIndex = cur->music;
+ break;
+ }
+ }
+
+ // TODO: Extra checks for two flags in room 56
+ //if ((spieler.flags32 & SpielerFlags32_10) != 0 && spieler.flags33 >= 0)
+ // musicIndex = 52;
+ //else
+ // musicIndex = 7;
+
+ if (musicIndex != _curMusic) {
+ stopMusic();
+ if (musicIndex >= 0)
+ playMusic(musicIndex, true);
+ }
+}
+
} // namespace Chewy
diff --git a/engines/chewy/sound.h b/engines/chewy/sound.h
index c2246b2d0e5..e5d0cf8df04 100644
--- a/engines/chewy/sound.h
+++ b/engines/chewy/sound.h
@@ -54,13 +54,14 @@ public:
void setSoundChannelVolume(uint channel, uint volume);
void setSoundChannelBalance(uint channel, int8 balance);
- void playMusic(int num, bool loop = false);
- void playMusic(uint8 *data, uint32 size, bool loop = false, DisposeAfterUse::Flag dispose = DisposeAfterUse::YES);
+ void playMusic(int16 num, bool loop = false);
+ void playMusic(uint8 *data, uint32 size);
void pauseMusic();
void resumeMusic();
void stopMusic();
bool isMusicActive();
void setMusicVolume(uint volume);
+ void playRoomMusic(int16 roomNum);
void playSpeech(int num, bool waitForFinish);
void pauseSpeech();
@@ -93,6 +94,7 @@ private:
Audio::SoundHandle _soundHandle[MAX_SOUND_EFFECTS];
Audio::SoundHandle _musicHandle;
Audio::SoundHandle _speechHandle;
+ int16 _curMusic = -1;
SoundResource *_speechRes;
SoundResource *_soundRes;
diff --git a/engines/chewy/video/cfo_decoder.cpp b/engines/chewy/video/cfo_decoder.cpp
index e4c733692e0..c0e498d7db6 100644
--- a/engines/chewy/video/cfo_decoder.cpp
+++ b/engines/chewy/video/cfo_decoder.cpp
@@ -213,7 +213,7 @@ void CfoDecoder::CfoVideoTrack::handleCustomFrame() {
break;
case kChunkPlayMusic:
// Used in videos 0, 18, 34, 71
- _sound->playMusic(_musicData, _musicSize, false, DisposeAfterUse::NO);
+ _sound->playMusic(_musicData, _musicSize);
break;
case kChunkPlaySeq:
error("Unused chunk kChunkPlaySeq found");
diff --git a/engines/chewy/video/video_player.cpp b/engines/chewy/video/video_player.cpp
index 47e3764fd9c..0e96c1b79d3 100644
--- a/engines/chewy/video/video_player.cpp
+++ b/engines/chewy/video/video_player.cpp
@@ -40,7 +40,6 @@ bool VideoPlayer::playVideo(uint num, bool stopMusic) {
if (stopMusic) {
g_engine->_sound->stopMusic();
- _G(currentSong) = -1;
}
if (!cfoDecoder->loadStream(videoStream)) {
Commit: 9a0f81c17eb05552e483022b4b0304b8e84f6d9b
https://github.com/scummvm/scummvm/commit/9a0f81c17eb05552e483022b4b0304b8e84f6d9b
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2022-06-14T01:52:23+03:00
Commit Message:
CHEWY: Remove redundant globals
Changed paths:
engines/chewy/dialogs/cinema.cpp
engines/chewy/dialogs/credits.cpp
engines/chewy/dialogs/files.cpp
engines/chewy/dialogs/inventory.cpp
engines/chewy/dialogs/main_menu.cpp
engines/chewy/dialogs/options.cpp
engines/chewy/effect.cpp
engines/chewy/effect.h
engines/chewy/globals.h
engines/chewy/inits.cpp
engines/chewy/main.cpp
engines/chewy/room.cpp
engines/chewy/rooms/room10.cpp
engines/chewy/sprite.cpp
engines/chewy/video/video_player.cpp
diff --git a/engines/chewy/dialogs/cinema.cpp b/engines/chewy/dialogs/cinema.cpp
index 0abf640da92..f8cec6eed31 100644
--- a/engines/chewy/dialogs/cinema.cpp
+++ b/engines/chewy/dialogs/cinema.cpp
@@ -157,8 +157,8 @@ void Cinema::execute() {
case Common::KEYCODE_RETURN:
hideCur();
_G(out)->cls();
- _G(out)->setPointer(_G(screen0));
- _G(fx)->blende1(_G(workptr), _G(screen0), _G(pal), 150, 0, 0);
+ _G(out)->setPointer((byte *)g_screen->getPixels());
+ _G(fx)->blende1(_G(workptr), _G(pal), 0, 0);
flic_cut(CINEMA_FLICS[topIndex + selected]);
_G(fontMgr)->setFont(_G(font6));
@@ -181,9 +181,9 @@ void Cinema::execute() {
if (flag) {
flag = false;
- _G(out)->setPointer(_G(screen0));
+ _G(out)->setPointer((byte *)g_screen->getPixels());
_G(room)->set_ak_pal(&_G(room_blk));
- _G(fx)->blende1(_G(workptr), _G(screen0), _G(pal), 150, 0, 0);
+ _G(fx)->blende1(_G(workptr), _G(pal), 0, 0);
} else {
_G(out)->copyToScreen();
}
diff --git a/engines/chewy/dialogs/credits.cpp b/engines/chewy/dialogs/credits.cpp
index 90646a20f70..f4c9d496de4 100644
--- a/engines/chewy/dialogs/credits.cpp
+++ b/engines/chewy/dialogs/credits.cpp
@@ -199,9 +199,9 @@ void Credits::execute() {
_G(room)->load_tgp(5, &_G(room_blk), 1, 0, GBOOK);
_G(gameState).scrollx = 0;
_G(gameState).scrolly = 0;
- _G(out)->setPointer(_G(screen0));
+ _G(out)->setPointer((byte *)g_screen->getPixels());
_G(room)->set_ak_pal(&_G(room_blk));
- _G(fx)->blende1(_G(workptr), _G(screen0), _G(pal), 150, 0, 0);
+ _G(fx)->blende1(_G(workptr), _G(pal), 0, 0);
for (int i = 0; i < 6; ++i) {
int color = 63 - (6 * i);
diff --git a/engines/chewy/dialogs/files.cpp b/engines/chewy/dialogs/files.cpp
index bedf06f4c9b..b3d77c83d5b 100644
--- a/engines/chewy/dialogs/files.cpp
+++ b/engines/chewy/dialogs/files.cpp
@@ -60,10 +60,10 @@ bool Files::execute(bool isInGame) {
_G(room)->load_tgp(1, &_G(room_blk), GBOOK_TGP, 0, GBOOK);
_G(out)->setPointer(_G(workptr));
_G(out)->map_spr2screen(_G(ablage)[_G(room_blk).AkAblage], 0, 0);
- _G(out)->setPointer(_G(screen0));
+ _G(out)->setPointer((byte *)g_screen->getPixels());
_G(room)->set_ak_pal(&_G(room_blk));
- _G(fx)->blende1(_G(workptr), _G(screen0), _G(pal), 150, 0, 0);
+ _G(fx)->blende1(_G(workptr), _G(pal), 0, 0);
_G(out)->setPointer(_G(workptr));
showCur();
@@ -269,7 +269,7 @@ enter:
}
} else if (mode[SAVE]) {
_G(out)->copyToScreen();
- _G(out)->setPointer(_G(screen0));
+ _G(out)->setPointer((byte *)g_screen->getPixels());
char slotName[81];
slotName[0] = '\0';
key = _G(out)->scanxy(70, 68 + (active_slot * 10),
diff --git a/engines/chewy/dialogs/inventory.cpp b/engines/chewy/dialogs/inventory.cpp
index 86360c210da..db3a32f6021 100644
--- a/engines/chewy/dialogs/inventory.cpp
+++ b/engines/chewy/dialogs/inventory.cpp
@@ -344,9 +344,9 @@ void Inventory::menu() {
_G(cur)->plot_cur();
_G(out)->setPointer(nullptr);
if (menu_flag1 == MENU_DISPLAY) {
- _G(fx)->blende1(_G(workptr), _G(screen0), nullptr, 200, 0, 300);
+ _G(fx)->blende1(_G(workptr), nullptr, 0, 300);
} else if (menu_flag1 == MENU_HIDE)
- _G(fx)->blende1(_G(workptr), _G(screen0), nullptr, 200, 1, 300);
+ _G(fx)->blende1(_G(workptr), nullptr, 1, 300);
menu_flag1 = false;
_G(out)->copyToScreen();
} else {
@@ -653,7 +653,7 @@ void Inventory::showDiary() {
_G(out)->copyToScreen();
_G(room)->set_ak_pal(&_G(room_blk));
_G(out)->setPointer(nullptr);
- _G(fx)->blende1(_G(workptr), _G(screen0), _G(pal), 150, 0, 0);
+ _G(fx)->blende1(_G(workptr), _G(pal), 0, 0);
while (_G(in)->getSwitchCode() != Common::KEYCODE_ESCAPE) {
g_events->update();
@@ -671,7 +671,7 @@ void Inventory::showDiary() {
plot_menu();
_G(out)->setPointer(nullptr);
_G(room)->set_ak_pal(&_G(room_blk));
- _G(fx)->blende1(_G(workptr), _G(screen0), _G(pal), 150, 0, 0);
+ _G(fx)->blende1(_G(workptr), _G(pal), 0, 0);
}
} // namespace Dialogs
diff --git a/engines/chewy/dialogs/main_menu.cpp b/engines/chewy/dialogs/main_menu.cpp
index e17691d0f50..c08e8ae9893 100644
--- a/engines/chewy/dialogs/main_menu.cpp
+++ b/engines/chewy/dialogs/main_menu.cpp
@@ -202,7 +202,7 @@ void MainMenu::startGame() {
bool MainMenu::loadGame() {
_G(flags).SaveMenu = true;
savePersonAni();
- _G(out)->setPointer(_G(screen0));
+ _G(out)->setPointer((byte *)g_screen->getPixels());
_G(fontMgr)->setFont(_G(font6));
cursorChoice(CUR_SAVE);
_G(cur)->move(152, 92);
diff --git a/engines/chewy/dialogs/options.cpp b/engines/chewy/dialogs/options.cpp
index acbee3fb1eb..603b3789faf 100644
--- a/engines/chewy/dialogs/options.cpp
+++ b/engines/chewy/dialogs/options.cpp
@@ -50,10 +50,10 @@ void Options::execute(TafInfo *ti) {
_G(room)->load_tgp(0, &_G(room_blk), GBOOK_TGP, 0, GBOOK);
_G(out)->setPointer(_G(workptr));
_G(out)->map_spr2screen(_G(ablage)[_G(room_blk).AkAblage], 0, 0);
- _G(out)->setPointer(_G(screen0));
+ _G(out)->setPointer((byte *)g_screen->getPixels());
_G(room)->set_ak_pal(&_G(room_blk));
- _G(fx)->blende1(_G(workptr), _G(screen0), _G(pal), 150, 0, 0);
+ _G(fx)->blende1(_G(workptr), _G(pal), 0, 0);
_G(out)->setPointer(_G(workptr));
int16 key = 0;
int16 surimy_ani = SURIMY_START;
@@ -252,9 +252,9 @@ void Options::execute(TafInfo *ti) {
_G(room)->load_tgp(1, &_G(room_blk), GBOOK_TGP, 0, GBOOK);
_G(out)->setPointer(_G(workptr));
_G(out)->map_spr2screen(_G(ablage)[_G(room_blk).AkAblage], 0, 0);
- _G(out)->setPointer(_G(screen0));
+ _G(out)->setPointer((byte *)g_screen->getPixels());
_G(room)->set_ak_pal(&_G(room_blk));
- _G(fx)->blende1(_G(workptr), _G(screen0), _G(pal), 150, 0, 0);
+ _G(fx)->blende1(_G(workptr), _G(pal), 0, 0);
_G(out)->setPointer(_G(workptr));
}
diff --git a/engines/chewy/effect.cpp b/engines/chewy/effect.cpp
index a9000098d78..d941da7cc47 100644
--- a/engines/chewy/effect.cpp
+++ b/engines/chewy/effect.cpp
@@ -60,7 +60,8 @@ void Effect::rnd_blende(byte *rnd_speicher, byte *sram_speicher, byte *screen, b
free(sp);
}
-void Effect::blende1(byte *memPtr, byte *screen, byte *palette, int16 frames, uint8 mode, int16 color) {
+void Effect::blende1(byte *memPtr, byte *palette, uint8 mode, int16 color) {
+ byte *screen = (byte *)g_screen->getPixels();
byte *sp = (byte *)MALLOC(8 * 8 + 4);
if (color < 256) {
for (int16 i = 0; i < 13; i++) {
diff --git a/engines/chewy/effect.h b/engines/chewy/effect.h
index b5dfe8af0fa..4da60c696ed 100644
--- a/engines/chewy/effect.h
+++ b/engines/chewy/effect.h
@@ -39,8 +39,8 @@ public:
Effect();
~Effect();
- void blende1(byte *memPtr, byte *screen,
- byte *palette, int16 frames, uint8 mode, int16 color);
+ void blende1(byte *memPtr,
+ byte *palette, uint8 mode, int16 color);
void border(byte *screen, int16 val1, uint8 mode, int16 color);
void rnd_blende(byte *rnd_speicher, byte *sram_speicher,
diff --git a/engines/chewy/globals.h b/engines/chewy/globals.h
index 54d19acbad7..ad5bdc5822a 100644
--- a/engines/chewy/globals.h
+++ b/engines/chewy/globals.h
@@ -119,7 +119,6 @@ public:
const uint8 *_chewy_ph_nr;
const uint8 *_chewy_ph;
byte *_pal = nullptr;
- byte *_screen0 = nullptr;
int16 _scr_width = 0;
BlendMode _fx_blend = BLEND_NONE;
void (*_SetUpScreenFunc)() = nullptr;
@@ -182,7 +181,6 @@ public:
TafInfo *_menutaf = nullptr;
TafSeqInfo *_howard_taf = nullptr;
TafInfo *_chewy = nullptr;
- int16 *_chewy_kor = nullptr;
Barriers *_barriers = nullptr;
Text *_txt = nullptr;
Room *_room = nullptr;
diff --git a/engines/chewy/inits.cpp b/engines/chewy/inits.cpp
index aa5b77b6468..ee85087db71 100644
--- a/engines/chewy/inits.cpp
+++ b/engines/chewy/inits.cpp
@@ -49,7 +49,6 @@ void standard_init() {
_G(out)->init();
_G(out)->cls();
_G(scr_width) = 0;
- _G(screen0) = (byte *)g_screen->getPixels();
// WORKAROUND: Moved from init_load because the original
// uses _G(curtaf)->_image below before _G(curtaf) was initialized
diff --git a/engines/chewy/main.cpp b/engines/chewy/main.cpp
index 9c27b65a7d3..b210da98c8d 100644
--- a/engines/chewy/main.cpp
+++ b/engines/chewy/main.cpp
@@ -78,13 +78,13 @@ void alloc_buffers() {
void free_buffers() {
_G(det)->del_dptr();
for (int16 i = 0; i < MAX_PERSON; i++)
- free((char *)_G(PersonTaf)[i]);
- free((char *)_G(spz_tinfo));
+ free(_G(PersonTaf)[i]);
+ free(_G(spz_tinfo));
free(_G(spblende));
- free((char *)_G(menutaf));
- free((char *)_G(chewy));
+ free(_G(menutaf));
+ free(_G(chewy));
- free((char *)_G(curtaf));
+ free(_G(curtaf));
free(_G(Ci).tempArea);
free(_G(pal));
free(_G(workpage));
@@ -268,7 +268,7 @@ bool mainLoop(int16 mode) {
case Common::KEYCODE_F6:
_G(flags).SaveMenu = true;
- _G(out)->setPointer(_G(screen0));
+ _G(out)->setPointer((byte *)g_screen->getPixels());
_G(fontMgr)->setFont(_G(font6));
cursorChoice(CUR_SAVE);
if (Dialogs::Files::execute(true) == 1) {
@@ -337,7 +337,7 @@ bool mainLoop(int16 mode) {
g_events->_mousePos.y = 92;
_G(fontMgr)->setFont(_G(font6));
- _G(out)->setPointer(_G(screen0));
+ _G(out)->setPointer((byte *)g_screen->getPixels());
cursorChoice(CUR_SAVE);
bool ret = Dialogs::Files::execute(true);
if (ret) {
@@ -577,22 +577,22 @@ void setupScreen(SetupScreenMode mode) {
_G(out)->setPointer(nullptr);
switch (_G(fx_blend)) {
case BLEND1:
- _G(fx)->blende1(_G(workptr), _G(screen0), _G(pal), 150, 0, 0);
+ _G(fx)->blende1(_G(workptr), _G(pal), 0, 0);
break;
case BLEND2:
- _G(fx)->blende1(_G(workptr), _G(screen0), _G(pal), 150, 1, 0);
+ _G(fx)->blende1(_G(workptr), _G(pal), 1, 0);
break;
case BLEND3:
- _G(fx)->rnd_blende(_G(spblende), _G(workptr), _G(screen0), _G(pal), 0, 10);
+ _G(fx)->rnd_blende(_G(spblende), _G(workptr), (byte *)g_screen->getPixels(), _G(pal), 0, 10);
break;
case BLEND4:
_G(out)->setPointer(_G(workptr));
_G(out)->cls();
_G(out)->setPointer(nullptr);
- _G(fx)->blende1(_G(workptr), _G(screen0), _G(pal), 150, 0, 0);
+ _G(fx)->blende1(_G(workptr), _G(pal), 0, 0);
break;
default:
diff --git a/engines/chewy/room.cpp b/engines/chewy/room.cpp
index 0b7cacce2bb..60adc671ba2 100644
--- a/engines/chewy/room.cpp
+++ b/engines/chewy/room.cpp
@@ -505,7 +505,6 @@ void load_chewy_taf(int16 taf_nr) {
_G(gameState).ChewyAni = taf_nr;
_G(AkChewyTaf) = taf_nr;
_G(chewy) = _G(mem)->taf_adr(filename);
- _G(chewy_kor) = _G(chewy)->correction;
}
}
}
diff --git a/engines/chewy/rooms/room10.cpp b/engines/chewy/rooms/room10.cpp
index 6d49a2f9c12..27842de0977 100644
--- a/engines/chewy/rooms/room10.cpp
+++ b/engines/chewy/rooms/room10.cpp
@@ -33,7 +33,7 @@ void Room10::entry() {
_G(out)->setPointer(_G(workptr));
_G(out)->map_spr2screen(_G(ablage)[_G(room_blk).AkAblage], _G(gameState).scrollx, _G(gameState).scrolly);
_G(out)->setPointer(nullptr);
- _G(fx)->blende1(_G(workptr), _G(screen0), _G(pal), 150, 0, 0);
+ _G(fx)->blende1(_G(workptr), _G(pal), 0, 0);
_G(gameState).R10Surimy = true;
_G(fx_blend) = BLEND_NONE;
flic_cut(FCUT_003);
diff --git a/engines/chewy/sprite.cpp b/engines/chewy/sprite.cpp
index 5cc89457fbe..738af00a1f2 100644
--- a/engines/chewy/sprite.cpp
+++ b/engines/chewy/sprite.cpp
@@ -156,8 +156,8 @@ void spriteEngine() {
if (!_G(gameState)._personHide[P_CHEWY]) {
if (!_G(spz_ani)[P_CHEWY]) {
int16 sprNr = _G(chewy_ph)[_G(moveState)[P_CHEWY].Phase * 8 + _G(moveState)[P_CHEWY].PhNr];
- x = _G(spieler_mi)[P_CHEWY].XyzStart[0] + _G(chewy_kor)[sprNr * 2] - _G(gameState).scrollx;
- y = _G(spieler_mi)[P_CHEWY].XyzStart[1] + _G(chewy_kor)[sprNr * 2 + 1] - _G(gameState).scrolly;
+ x = _G(spieler_mi)[P_CHEWY].XyzStart[0] + _G(chewy)->correction[sprNr * 2] - _G(gameState).scrollx;
+ y = _G(spieler_mi)[P_CHEWY].XyzStart[1] + _G(chewy)->correction[sprNr * 2 + 1] - _G(gameState).scrolly;
calc_zoom(_G(spieler_mi)[P_CHEWY].XyzStart[1], (int16)_G(room)->_roomInfo->_zoomFactor,
(int16)_G(room)->_roomInfo->_zoomFactor, &_G(moveState)[P_CHEWY]);
diff --git a/engines/chewy/video/video_player.cpp b/engines/chewy/video/video_player.cpp
index 0e96c1b79d3..d41a838f574 100644
--- a/engines/chewy/video/video_player.cpp
+++ b/engines/chewy/video/video_player.cpp
@@ -255,8 +255,8 @@ bool VideoPlayer::handleCustom(uint num, uint frame, CfoDecoder *cfoDecoder) {
case FCUT_078: {
// Room64::cut_sev
const int16 spr_nr = _G(chewy_ph)[_G(moveState)[P_CHEWY].Phase * 8 + _G(moveState)[P_CHEWY].PhNr];
- const int16 x = _G(spieler_mi)[P_CHEWY].XyzStart[0] + _G(chewy_kor)[spr_nr * 2] - scrollx;
- const int16 y = _G(spieler_mi)[P_CHEWY].XyzStart[1] + _G(chewy_kor)[spr_nr * 2 + 1] - scrolly;
+ const int16 x = _G(spieler_mi)[P_CHEWY].XyzStart[0] + _G(chewy)->correction[spr_nr * 2] - scrollx;
+ const int16 y = _G(spieler_mi)[P_CHEWY].XyzStart[1] + _G(chewy)->correction[spr_nr * 2 + 1] - scrolly;
calc_zoom(_G(spieler_mi)[P_CHEWY].XyzStart[1], (int16)_G(room)->_roomInfo->_zoomFactor, (int16)_G(room)->_roomInfo->_zoomFactor, &_G(moveState)[P_CHEWY]);
_G(out)->scale_set(_G(chewy)->image[spr_nr], x, y, _G(moveState)[P_CHEWY].Xzoom, _G(moveState)[P_CHEWY].Yzoom, _G(scr_width));
Commit: 64eb1c50e5c3bff4254c0b883979e727a3e2ceff
https://github.com/scummvm/scummvm/commit/64eb1c50e5c3bff4254c0b883979e727a3e2ceff
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2022-06-14T01:52:23+03:00
Commit Message:
CHEWY: Remove unused parameters
Changed paths:
engines/chewy/dialogs/main_menu.cpp
engines/chewy/effect.cpp
engines/chewy/effect.h
engines/chewy/main.cpp
diff --git a/engines/chewy/dialogs/main_menu.cpp b/engines/chewy/dialogs/main_menu.cpp
index c08e8ae9893..f5afa53af6c 100644
--- a/engines/chewy/dialogs/main_menu.cpp
+++ b/engines/chewy/dialogs/main_menu.cpp
@@ -69,7 +69,7 @@ void MainMenu::execute() {
_G(room)->loadRoom(&_G(room_blk), 98, &_G(gameState));
g_engine->_sound->playRoomMusic(98);
- _G(fx)->border(_G(workpage), 100, 0, 0);
+ _G(fx)->border(_G(workpage), 0, 0);
_G(out)->setPalette(_G(pal));
_G(gameState)._personHide[P_CHEWY] = true;
@@ -90,7 +90,7 @@ void MainMenu::execute() {
break;
case MM_VIEW_INTRO:
- _G(fx)->border(_G(workpage), 100, 0, 0);
+ _G(fx)->border(_G(workpage), 0, 0);
_G(out)->setPointer(_G(workptr));
_G(flags).NoPalAfterFlc = true;
flic_cut(FCUT_135);
@@ -116,10 +116,10 @@ void MainMenu::execute() {
break;
case MM_CREDITS:
- _G(fx)->border(_G(workpage), 100, 0, 0);
+ _G(fx)->border(_G(workpage), 0, 0);
_G(flags).NoPalAfterFlc = true;
flic_cut(FCUT_159);
- _G(fx)->border(_G(workpage), 100, 0, 0);
+ _G(fx)->border(_G(workpage), 0, 0);
Dialogs::Credits::execute();
break;
diff --git a/engines/chewy/effect.cpp b/engines/chewy/effect.cpp
index d941da7cc47..a3d0c7730ce 100644
--- a/engines/chewy/effect.cpp
+++ b/engines/chewy/effect.cpp
@@ -30,7 +30,7 @@ Effect::Effect() {
Effect::~Effect() {
}
-void Effect::rnd_blende(byte *rnd_speicher, byte *sram_speicher, byte *screen, byte *palette, int16 col, int16 skip_line) {
+void Effect::rnd_blende(byte *rnd_speicher, byte *sram_speicher, byte *screen, byte *palette, int16 col) {
byte *sp = (byte *)MALLOC(8 * 8 + 4);
int16 *rnd_zeiger = (int16 *)rnd_speicher;
if (col < 256) {
@@ -144,7 +144,7 @@ void Effect::blende1(byte *memPtr, byte *palette, uint8 mode, int16 color) {
free(sp);
}
-void Effect::border(byte *workpage_, int16 lines, uint8 mode, int16 color) {
+void Effect::border(byte *workpage_, uint8 mode, int16 color) {
if (mode) {
for (int i = 0, x = 0; i < 20; ++i, x += 8) {
_G(out)->setPointer(workpage_ + 4);
diff --git a/engines/chewy/effect.h b/engines/chewy/effect.h
index 4da60c696ed..07afc6e3f62 100644
--- a/engines/chewy/effect.h
+++ b/engines/chewy/effect.h
@@ -41,10 +41,10 @@ public:
void blende1(byte *memPtr,
byte *palette, uint8 mode, int16 color);
- void border(byte *screen, int16 val1, uint8 mode, int16 color);
+ void border(byte *screen, uint8 mode, int16 color);
void rnd_blende(byte *rnd_speicher, byte *sram_speicher,
- byte *screen, byte *palette, int16 col, int16 skip_line);
+ byte *screen, byte *palette, int16 col);
};
diff --git a/engines/chewy/main.cpp b/engines/chewy/main.cpp
index b210da98c8d..efe3945aeed 100644
--- a/engines/chewy/main.cpp
+++ b/engines/chewy/main.cpp
@@ -585,7 +585,7 @@ void setupScreen(SetupScreenMode mode) {
break;
case BLEND3:
- _G(fx)->rnd_blende(_G(spblende), _G(workptr), (byte *)g_screen->getPixels(), _G(pal), 0, 10);
+ _G(fx)->rnd_blende(_G(spblende), _G(workptr), (byte *)g_screen->getPixels(), _G(pal), 0);
break;
case BLEND4:
Commit: 76559c0436c0a0d50ca8b092bf30a734f2b26c9a
https://github.com/scummvm/scummvm/commit/76559c0436c0a0d50ca8b092bf30a734f2b26c9a
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2022-06-14T01:52:23+03:00
Commit Message:
CHEWY: More fixes for speech only mode
Changed paths:
engines/chewy/atds.cpp
engines/chewy/r_event.cpp
engines/chewy/rooms/room68.cpp
engines/chewy/sound.cpp
engines/chewy/sound.h
engines/chewy/sprite.cpp
diff --git a/engines/chewy/atds.cpp b/engines/chewy/atds.cpp
index e99020b6526..f2e8d9ab849 100644
--- a/engines/chewy/atds.cpp
+++ b/engines/chewy/atds.cpp
@@ -414,7 +414,7 @@ bool Atdsys::start_ats(int16 txtNr, int16 txtMode, int16 color, int16 mode, int1
if (_atsv.text.size() > 0) {
*vocNr = txtMode != TXT_MARK_NAME ? _text->getLastSpeechId() : -1;
- _atsv.shown = g_engine->_sound->subtitlesEnabled();
+ _atsv.shown = true;
_atsv._txtMode = txtMode;
_atsv._delayCount = get_delay(_atsv.text.size());
_atsv._color = color;
@@ -430,6 +430,8 @@ void Atdsys::stop_ats() {
}
void Atdsys::print_ats(int16 x, int16 y, int16 scrX, int16 scrY) {
+ const Sound *sound = g_engine->_sound;
+
if (_atsv.shown) {
if (_atdsv._eventsEnabled) {
switch (_G(in)->getSwitchCode()) {
@@ -470,22 +472,24 @@ void Atdsys::print_ats(int16 x, int16 y, int16 scrX, int16 scrY) {
split_string(atsSsi, &splitString);
for (int16 i = 0; i < splitString._nr; i++) {
- _G(out)->printxy(splitString._x[i],
- splitString._y + (i * h) + 1,
- 0, 300, 0, splitString._strPtr[i]);
- _G(out)->printxy(splitString._x[i],
- splitString._y + (i * h) - 1,
- 0, 300, 0, splitString._strPtr[i]);
- _G(out)->printxy(splitString._x[i] + 1,
- splitString._y + (i * h),
- 0, 300, 0, splitString._strPtr[i]);
- _G(out)->printxy(splitString._x[i] - 1,
- splitString._y + (i * h),
- 0, 300, 0, splitString._strPtr[i]);
- _G(out)->printxy(splitString._x[i],
- splitString._y + (i * h),
- _atsv._color,
- 300, 0, splitString._strPtr[i]);
+ if (g_engine->_sound->subtitlesEnabled()) {
+ _G(out)->printxy(splitString._x[i],
+ splitString._y + (i * h) + 1,
+ 0, 300, 0, splitString._strPtr[i]);
+ _G(out)->printxy(splitString._x[i],
+ splitString._y + (i * h) - 1,
+ 0, 300, 0, splitString._strPtr[i]);
+ _G(out)->printxy(splitString._x[i] + 1,
+ splitString._y + (i * h),
+ 0, 300, 0, splitString._strPtr[i]);
+ _G(out)->printxy(splitString._x[i] - 1,
+ splitString._y + (i * h),
+ 0, 300, 0, splitString._strPtr[i]);
+ _G(out)->printxy(splitString._x[i],
+ splitString._y + (i * h),
+ _atsv._color,
+ 300, 0, splitString._strPtr[i]);
+ }
shownLen += strlen(splitString._strPtr[i]) + 1;
}
@@ -672,14 +676,10 @@ void Atdsys::print_aad(int16 scrX, int16 scrY) {
_aadv._strHeader->_vocNr - ATDS_VOC_OFFSET != -1) {
if (_atdsv._vocNr != _aadv._strHeader->_vocNr - ATDS_VOC_OFFSET) {
_atdsv._vocNr = _aadv._strHeader->_vocNr - ATDS_VOC_OFFSET;
- g_engine->_sound->playSpeech(_atdsv._vocNr, false);
- int16 vocx = _G(moveState)[personId].Xypos[0] -
+ const int16 vocx = _G(moveState)[personId].Xypos[0] -
_G(gameState).scrollx + _G(spieler_mi)[personId].HotX;
g_engine->_sound->setSoundChannelBalance(0, getStereoPos(vocx));
-
- if (!g_engine->_sound->subtitlesEnabled()) {
- _aadv._strNr = -1;
- }
+ g_engine->_sound->playSpeech(_atdsv._vocNr, false);
}
}
diff --git a/engines/chewy/r_event.cpp b/engines/chewy/r_event.cpp
index a1166efa23e..96dff9537d9 100644
--- a/engines/chewy/r_event.cpp
+++ b/engines/chewy/r_event.cpp
@@ -794,9 +794,7 @@ void flic_cut(int16 nr) {
if (nr != FCUT_135) {
g_engine->_sound->playRoomMusic(_G(gameState)._personRoomNr[0]);
- if (g_engine->_sound->speechEnabled())
- _G(det)->enable_room_sound();
-
+ _G(det)->enable_room_sound();
_G(uhr)->resetTimer(0, 0);
}
diff --git a/engines/chewy/rooms/room68.cpp b/engines/chewy/rooms/room68.cpp
index 0f9dd860ea4..c51a79fc255 100644
--- a/engines/chewy/rooms/room68.cpp
+++ b/engines/chewy/rooms/room68.cpp
@@ -347,10 +347,6 @@ void Room68::kostuem_aad(int16 aad_nr) {
else if (!_G(gameState).R67LiedOk)
startAadWait(389);
else {
- // TODO: Reimplement
- //if (!g_engine->_sound->subtitlesEnabled())
- // _G(sndPlayer)->fadeOut(5);
-
_G(SetUpScreenFunc) = nullptr;
delInventory(_G(gameState).AkInvent);
goAutoXy(150, -13, P_NICHELLE, ANI_WAIT);
@@ -374,19 +370,11 @@ void Room68::kostuem_aad(int16 aad_nr) {
_G(det)->stop_detail(23);
}
- if (g_engine->_sound->subtitlesEnabled()) {
- g_engine->_sound->playSound(108, 1, false);
- }
+ g_engine->_sound->playSound(108, 1, false);
_G(det)->startDetail(24, 255, ANI_FRONT);
setPersonPos(26, 40, P_NICHELLE, P_RIGHT);
- if (g_engine->_sound->subtitlesEnabled()) {
- startAadWait(391);
- } else {
- waitShowScreen(100);
- startAadWait(602);
- waitShowScreen(100);
- }
+ startAadWait(391);
_G(room)->set_timer_status(8, TIMER_STOP);
_G(det)->del_static_ani(8);
@@ -417,9 +405,7 @@ void Room68::kostuem_aad(int16 aad_nr) {
_G(gameState)._personHide[P_NICHELLE] = false;
setPersonPos(150, -13, P_NICHELLE, P_RIGHT);
- if (g_engine->_sound->subtitlesEnabled()) {
- g_engine->_sound->playRoomMusic(_G(gameState)._personRoomNr[0]);
- }
+ g_engine->_sound->playRoomMusic(_G(gameState)._personRoomNr[0]);
}
showCur();
}
diff --git a/engines/chewy/sound.cpp b/engines/chewy/sound.cpp
index e5f69f964dd..e8741bf0e68 100644
--- a/engines/chewy/sound.cpp
+++ b/engines/chewy/sound.cpp
@@ -103,7 +103,7 @@ void Sound::stopAllSounds() {
stopSound(i);
}
-bool Sound::isSoundActive(uint channel) {
+bool Sound::isSoundActive(uint channel) const {
assert(channel < MAX_SOUND_EFFECTS);
return _mixer->isSoundHandleActive(_soundHandle[channel]);
}
@@ -153,7 +153,7 @@ void Sound::stopMusic() {
_mixer->stopHandle(_musicHandle);
}
-bool Sound::isMusicActive() {
+bool Sound::isMusicActive() const {
return _mixer->isSoundHandleActive(_musicHandle);
}
@@ -202,7 +202,7 @@ void Sound::stopSpeech() {
_mixer->stopHandle(_speechHandle);
}
-bool Sound::isSpeechActive() {
+bool Sound::isSpeechActive() const {
return _mixer->isSoundHandleActive(_speechHandle);
}
diff --git a/engines/chewy/sound.h b/engines/chewy/sound.h
index e5d0cf8df04..09c0d5e5b05 100644
--- a/engines/chewy/sound.h
+++ b/engines/chewy/sound.h
@@ -49,7 +49,7 @@ public:
void resumeSound(uint channel);
void stopSound(uint channel = 0);
void stopAllSounds();
- bool isSoundActive(uint channel);
+ bool isSoundActive(uint channel) const;
void setSoundVolume(uint volume);
void setSoundChannelVolume(uint channel, uint volume);
void setSoundChannelBalance(uint channel, int8 balance);
@@ -59,7 +59,7 @@ public:
void pauseMusic();
void resumeMusic();
void stopMusic();
- bool isMusicActive();
+ bool isMusicActive() const;
void setMusicVolume(uint volume);
void playRoomMusic(int16 roomNum);
@@ -67,7 +67,7 @@ public:
void pauseSpeech();
void resumeSpeech();
void stopSpeech();
- bool isSpeechActive();
+ bool isSpeechActive() const;
void setSpeechVolume(uint volume);
void stopAll();
diff --git a/engines/chewy/sprite.cpp b/engines/chewy/sprite.cpp
index 738af00a1f2..c25b9d809a2 100644
--- a/engines/chewy/sprite.cpp
+++ b/engines/chewy/sprite.cpp
@@ -505,7 +505,7 @@ bool startAtsWait(int16 txtNr, int16 txtMode, int16 col, int16 mode) {
g_engine->_sound->setSoundChannelBalance(0, _G(atds)->getStereoPos(vocx));
if (vocNr >= 0) {
- g_engine->_sound->playSpeech(vocNr, !g_engine->_sound->subtitlesEnabled());
+ g_engine->_sound->playSpeech(vocNr, false);
}
setupScreen(DO_SETUP);
Commit: 8e5d44f8ee1df6e8feeac53e04b0194f6d615259
https://github.com/scummvm/scummvm/commit/8e5d44f8ee1df6e8feeac53e04b0194f6d615259
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2022-06-14T01:52:24+03:00
Commit Message:
CHEWY: More fixes for dialog delays
Changed paths:
engines/chewy/atds.cpp
engines/chewy/sprite.cpp
diff --git a/engines/chewy/atds.cpp b/engines/chewy/atds.cpp
index f2e8d9ab849..17e15137ca0 100644
--- a/engines/chewy/atds.cpp
+++ b/engines/chewy/atds.cpp
@@ -430,8 +430,6 @@ void Atdsys::stop_ats() {
}
void Atdsys::print_ats(int16 x, int16 y, int16 scrX, int16 scrY) {
- const Sound *sound = g_engine->_sound;
-
if (_atsv.shown) {
if (_atdsv._eventsEnabled) {
switch (_G(in)->getSwitchCode()) {
@@ -681,6 +679,9 @@ void Atdsys::print_aad(int16 scrX, int16 scrY) {
g_engine->_sound->setSoundChannelBalance(0, getStereoPos(vocx));
g_engine->_sound->playSpeech(_atdsv._vocNr, false);
}
+
+ if (_atdsv._vocNr >= 0 && !g_engine->_sound->isSpeechActive())
+ stopAad();
}
if (_aadv._delayCount <= 0) {
diff --git a/engines/chewy/sprite.cpp b/engines/chewy/sprite.cpp
index c25b9d809a2..b6c36148a08 100644
--- a/engines/chewy/sprite.cpp
+++ b/engines/chewy/sprite.cpp
@@ -463,10 +463,14 @@ void startAadWait(int16 diaNr) {
g_engine->_sound->isSpeechActive()
)) {
- if (_G(minfo).button && _G(atds)->aadGetStatus() == -1)
+ if (_G(minfo).button && _G(atds)->aadGetStatus() == -1) {
g_engine->_sound->stopSpeech();
+ }
setupScreen(DO_SETUP);
+
+ if (_G(atds)->aadGetStatus() != -1 && g_engine->_sound->speechEnabled() && !g_engine->_sound->isSpeechActive())
+ _G(atds)->stopAad();
}
_G(mouseLeftClick) = oldMouseLeftClick;
Commit: a30eb710e72c31b53bfaa30a214ec7d969cd3617
https://github.com/scummvm/scummvm/commit/a30eb710e72c31b53bfaa30a214ec7d969cd3617
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2022-06-14T01:52:24+03:00
Commit Message:
CHEWY: Init intro and don't play Chewy's message if intro is skipped
Changed paths:
engines/chewy/r_event.cpp
diff --git a/engines/chewy/r_event.cpp b/engines/chewy/r_event.cpp
index 96dff9537d9..ae9bc0f1ee5 100644
--- a/engines/chewy/r_event.cpp
+++ b/engines/chewy/r_event.cpp
@@ -661,7 +661,7 @@ static void playIntroSequence() {
int16 ret = 0;
_G(atds)->load_atds(98, AAD_DATA);
-
+ setupScreen(DO_SETUP);
_G(out)->setPointer(nullptr);
_G(out)->cls();
@@ -681,7 +681,8 @@ static void playIntroSequence() {
SHOULD_QUIT_RETURN;
}
- //if (ret == -1) {
+ // Chewy says he's in big trouble
+ if (ret != -1) {
_G(out)->setPointer(nullptr);
_G(out)->cls();
_G(out)->raster_col(254, 62, 35, 7);
@@ -693,7 +694,7 @@ static void playIntroSequence() {
} else {
delay(6000);
}
- //}
+ }
_G(out)->setPointer(_G(workptr));
_G(out)->cls();
Commit: 8e749d04cfc6fc388490e2dc0617aaeb51628f77
https://github.com/scummvm/scummvm/commit/8e749d04cfc6fc388490e2dc0617aaeb51628f77
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2022-06-14T01:52:24+03:00
Commit Message:
CHEWY: Small refactoring in the parameters of load_tgp()
Changed paths:
engines/chewy/dialogs/cinema.cpp
engines/chewy/dialogs/credits.cpp
engines/chewy/dialogs/files.cpp
engines/chewy/dialogs/inventory.cpp
engines/chewy/dialogs/options.cpp
engines/chewy/room.cpp
engines/chewy/room.h
engines/chewy/t_event.cpp
diff --git a/engines/chewy/dialogs/cinema.cpp b/engines/chewy/dialogs/cinema.cpp
index f8cec6eed31..d6b0ee886a7 100644
--- a/engines/chewy/dialogs/cinema.cpp
+++ b/engines/chewy/dialogs/cinema.cpp
@@ -55,7 +55,7 @@ void Cinema::execute() {
_G(fontMgr)->setFont(_G(font6));
- _G(room)->load_tgp(4, &_G(room_blk), 1, 0, GBOOK);
+ _G(room)->load_tgp(4, &_G(room_blk), 1, false, GBOOK);
showCur();
EVENTS_CLEAR;
g_events->_kbInfo._scanCode = 0;
diff --git a/engines/chewy/dialogs/credits.cpp b/engines/chewy/dialogs/credits.cpp
index f4c9d496de4..620a25c402e 100644
--- a/engines/chewy/dialogs/credits.cpp
+++ b/engines/chewy/dialogs/credits.cpp
@@ -196,7 +196,7 @@ void Credits::execute() {
int lineScrolled = 0;
int fontCol;
- _G(room)->load_tgp(5, &_G(room_blk), 1, 0, GBOOK);
+ _G(room)->load_tgp(5, &_G(room_blk), 1, false, GBOOK);
_G(gameState).scrollx = 0;
_G(gameState).scrolly = 0;
_G(out)->setPointer((byte *)g_screen->getPixels());
diff --git a/engines/chewy/dialogs/files.cpp b/engines/chewy/dialogs/files.cpp
index b3d77c83d5b..72da8865cc8 100644
--- a/engines/chewy/dialogs/files.cpp
+++ b/engines/chewy/dialogs/files.cpp
@@ -57,7 +57,7 @@ bool Files::execute(bool isInGame) {
TafInfo *ti = _G(mem)->taf_adr(OPTION_TAF);
EVENTS_CLEAR;
- _G(room)->load_tgp(1, &_G(room_blk), GBOOK_TGP, 0, GBOOK);
+ _G(room)->load_tgp(1, &_G(room_blk), GBOOK_TGP, false, GBOOK);
_G(out)->setPointer(_G(workptr));
_G(out)->map_spr2screen(_G(ablage)[_G(room_blk).AkAblage], 0, 0);
_G(out)->setPointer((byte *)g_screen->getPixels());
@@ -296,7 +296,7 @@ enter:
free(ti);
- _G(room)->load_tgp(_G(gameState)._personRoomNr[P_CHEWY], &_G(room_blk), EPISODE1_TGP, GED_LOAD, EPISODE1);
+ _G(room)->load_tgp(_G(gameState)._personRoomNr[P_CHEWY], &_G(room_blk), EPISODE1_TGP, true, EPISODE1);
_G(fx_blend) = BLEND1;
_G(room)->set_ak_pal(&_G(room_blk));
diff --git a/engines/chewy/dialogs/inventory.cpp b/engines/chewy/dialogs/inventory.cpp
index db3a32f6021..4c41f6c441d 100644
--- a/engines/chewy/dialogs/inventory.cpp
+++ b/engines/chewy/dialogs/inventory.cpp
@@ -647,7 +647,7 @@ void Inventory::showDiary() {
_G(gameState).scrollx = 0;
_G(gameState).scrolly = 0;
- _G(room)->load_tgp(DIARY_START, &_G(room_blk), GBOOK_TGP, 0, GBOOK);
+ _G(room)->load_tgp(DIARY_START, &_G(room_blk), GBOOK_TGP, false, GBOOK);
_G(out)->setPointer(_G(workptr));
_G(out)->map_spr2screen(_G(ablage)[_G(room_blk).AkAblage], _G(gameState).scrollx, _G(gameState).scrolly);
_G(out)->copyToScreen();
@@ -664,7 +664,7 @@ void Inventory::showDiary() {
SHOULD_QUIT_RETURN;
}
- _G(room)->load_tgp(_G(gameState)._personRoomNr[P_CHEWY], &_G(room_blk), EPISODE1_TGP, GED_LOAD, EPISODE1);
+ _G(room)->load_tgp(_G(gameState)._personRoomNr[P_CHEWY], &_G(room_blk), EPISODE1_TGP, true, EPISODE1);
_G(gameState).scrollx = scrollx;
_G(gameState).scrolly = scrolly;
setupScreen(NO_SETUP);
diff --git a/engines/chewy/dialogs/options.cpp b/engines/chewy/dialogs/options.cpp
index 603b3789faf..e93f490d87d 100644
--- a/engines/chewy/dialogs/options.cpp
+++ b/engines/chewy/dialogs/options.cpp
@@ -47,7 +47,7 @@ namespace Dialogs {
void Options::execute(TafInfo *ti) {
long akt_clock = 0, stop_clock = 0;
- _G(room)->load_tgp(0, &_G(room_blk), GBOOK_TGP, 0, GBOOK);
+ _G(room)->load_tgp(0, &_G(room_blk), GBOOK_TGP, false, GBOOK);
_G(out)->setPointer(_G(workptr));
_G(out)->map_spr2screen(_G(ablage)[_G(room_blk).AkAblage], 0, 0);
_G(out)->setPointer((byte *)g_screen->getPixels());
@@ -249,7 +249,7 @@ void Options::execute(TafInfo *ti) {
--delay_count;
}
- _G(room)->load_tgp(1, &_G(room_blk), GBOOK_TGP, 0, GBOOK);
+ _G(room)->load_tgp(1, &_G(room_blk), GBOOK_TGP, false, GBOOK);
_G(out)->setPointer(_G(workptr));
_G(out)->map_spr2screen(_G(ablage)[_G(room_blk).AkAblage], 0, 0);
_G(out)->setPointer((byte *)g_screen->getPixels());
diff --git a/engines/chewy/room.cpp b/engines/chewy/room.cpp
index 60adc671ba2..1d2b970922a 100644
--- a/engines/chewy/room.cpp
+++ b/engines/chewy/room.cpp
@@ -174,7 +174,7 @@ void Room::loadRoom(RaumBlk *Rb, int16 room_nr, GameState *player) {
Rb->DetKorrekt = Rb->Fti->correction;
}
_G(obj)->calc_all_static_detail();
- load_tgp(_roomInfo->_imageNr, Rb, EPISODE1_TGP, GED_LOAD, EPISODE1);
+ load_tgp(_roomInfo->_imageNr, Rb, EPISODE1_TGP, true, EPISODE1);
set_pal(_ablagePal[Rb->AkAblage], Rb->LowPalMem);
calc_invent(Rb, player);
@@ -294,7 +294,7 @@ void Room::calc_invent(RaumBlk *Rb, GameState *player) {
delete spriteRes;
}
-int16 Room::load_tgp(int16 nr, RaumBlk *Rb, int16 tgp_idx, int16 mode, const char *fileName) {
+int16 Room::load_tgp(int16 nr, RaumBlk *Rb, int16 tgp_idx, bool loadBarriers, const char *fileName) {
BackgroundResource *res = new BackgroundResource(fileName);
TBFChunk *img = res->getImage(nr, false);
@@ -312,9 +312,8 @@ int16 Room::load_tgp(int16 nr, RaumBlk *Rb, int16 tgp_idx, int16 mode, const cha
memcpy(_ablagePal[Rb->AkAblage], img->palette, 3 * 256);
set_ablage_info(Rb->AkAblage, nr + (1000 * tgp_idx), img->size);
- if (mode == GED_LOAD) {
+ if (loadBarriers)
_barriers->init(nr, img->width, img->height);
- }
}
delete img;
diff --git a/engines/chewy/room.h b/engines/chewy/room.h
index 12918a64239..5439a5684fc 100644
--- a/engines/chewy/room.h
+++ b/engines/chewy/room.h
@@ -37,7 +37,6 @@ extern const int16 SURIMY_TAF19_PHASES[4][2];
#define MAX_ABLAGE 4
#define ABLAGE_BLOCK_SIZE 64000l
-#define GED_LOAD 1
class JungleRoom {
protected:
@@ -79,7 +78,7 @@ public:
~Room();
void loadRoom(RaumBlk *Rb, int16 room_nr, GameState *player);
- int16 load_tgp(int16 nr, RaumBlk *Rb, int16 tgp_idx, int16 mode, const char *fileName);
+ int16 load_tgp(int16 nr, RaumBlk *Rb, int16 tgp_idx, bool loadBarriers, const char *fileName);
byte *get_ablage(int16 nr);
byte **get_ablage();
void set_timer_start(int16 timer_start);
diff --git a/engines/chewy/t_event.cpp b/engines/chewy/t_event.cpp
index b015c7c02c3..38c9525a253 100644
--- a/engines/chewy/t_event.cpp
+++ b/engines/chewy/t_event.cpp
@@ -2168,7 +2168,7 @@ void calc_inv_use_txt(int16 test_nr) {
_G(gameState).scrollx = 0;
_G(gameState).scrolly = 0;
- _G(room)->load_tgp(NOTEBOOK_START, &_G(room_blk), GBOOK_TGP, 0, GBOOK);
+ _G(room)->load_tgp(NOTEBOOK_START, &_G(room_blk), GBOOK_TGP, false, GBOOK);
_G(out)->setPointer(_G(workptr));
_G(out)->map_spr2screen(_G(ablage)[_G(room_blk).AkAblage], _G(gameState).scrollx, _G(gameState).scrolly);
_G(out)->copyToScreen();
@@ -2182,7 +2182,7 @@ void calc_inv_use_txt(int16 test_nr) {
SHOULD_QUIT_RETURN;
}
- _G(room)->load_tgp(_G(gameState)._personRoomNr[P_CHEWY], &_G(room_blk), EPISODE1_TGP, GED_LOAD, EPISODE1);
+ _G(room)->load_tgp(_G(gameState)._personRoomNr[P_CHEWY], &_G(room_blk), EPISODE1_TGP, true, EPISODE1);
_G(gameState).scrollx = scrollx;
_G(gameState).scrolly = scrolly;
Commit: 248b2638f2ee056385b01de93e558ac23d7ef8c1
https://github.com/scummvm/scummvm/commit/248b2638f2ee056385b01de93e558ac23d7ef8c1
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2022-06-14T01:52:24+03:00
Commit Message:
CHEWY: Don't wait forever for the music to end while playing videos
Changed paths:
engines/chewy/video/cfo_decoder.cpp
diff --git a/engines/chewy/video/cfo_decoder.cpp b/engines/chewy/video/cfo_decoder.cpp
index c0e498d7db6..1524c3bdc40 100644
--- a/engines/chewy/video/cfo_decoder.cpp
+++ b/engines/chewy/video/cfo_decoder.cpp
@@ -183,6 +183,7 @@ void CfoDecoder::CfoVideoTrack::handleCustomFrame() {
for (uint32 i = 0; i < chunkCount; ++i) {
uint32 frameSize = _fileStream->readUint32LE();
uint16 frameType = _fileStream->readUint16LE();
+ uint16 musicLoops = 0;
switch (frameType) {
case kChunkFadeIn:
@@ -235,7 +236,9 @@ void CfoDecoder::CfoVideoTrack::handleCustomFrame() {
while (g_system->getEventManager()->pollEvent(event)) {} // ignore events
g_system->updateScreen();
g_system->delayMillis(10);
- } while (_sound->isMusicActive());
+ // Await 100 loops (about 1 sec)
+ musicLoops++;
+ } while (_sound->isMusicActive() && musicLoops < 100);
break;
case kChunkSetMusicVolume:
volume = _fileStream->readUint16LE() * Audio::Mixer::kMaxChannelVolume / 63;
More information about the Scummvm-git-logs
mailing list