[Scummvm-git-logs] scummvm master -> e2366d4089ca29ea20da171d008d9d4ef0fd7acc

sev- noreply at scummvm.org
Tue Jul 1 22:32:15 UTC 2025


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://api.github.com/repos/scummvm/scummvm .

Summary:
e2366d4089 DIRECTOR: Fix Palette Duplication


Commit: e2366d4089ca29ea20da171d008d9d4ef0fd7acc
    https://github.com/scummvm/scummvm/commit/e2366d4089ca29ea20da171d008d9d4ef0fd7acc
Author: Malhar (themalharbdv2046 at gmail.com)
Date: 2025-07-02T00:32:12+02:00

Commit Message:
DIRECTOR: Fix Palette Duplication

When duplicating, deep copy of palette should be made

Changed paths:
    engines/director/castmember/palette.cpp
    engines/director/castmember/palette.h


diff --git a/engines/director/castmember/palette.cpp b/engines/director/castmember/palette.cpp
index 0c59ab0c072..9f9ae4fbacb 100644
--- a/engines/director/castmember/palette.cpp
+++ b/engines/director/castmember/palette.cpp
@@ -41,6 +41,21 @@ PaletteCastMember::PaletteCastMember(Cast *cast, uint16 castId, PaletteCastMembe
 	_palette = source._palette ? new PaletteV4(*source._palette) : nullptr;
 }
 
+PaletteCastMember::PaletteCastMember(Cast *cast, uint16 castId, byte *paletteData, PaletteV4 *pal) 
+	: CastMember(cast, castId) {
+	_type = kCastPalette;
+	_palette = new PaletteV4(pal->id, paletteData, pal->length);
+	_loaded = true;
+}
+ 
+// Need to make a deep copy
+CastMember *PaletteCastMember::duplicate(Cast *cast, uint16 castId) {
+	byte *buf = (byte *)malloc(_palette->length);
+	memcpy(buf, _palette, _palette->length);
+
+	return (CastMember *)(new PaletteCastMember(cast, castId, buf, _palette));
+}
+
 PaletteCastMember::~PaletteCastMember() {
 	if (_palette) {
 		delete[] _palette->palette;
diff --git a/engines/director/castmember/palette.h b/engines/director/castmember/palette.h
index 874d226e169..66db897c0bf 100644
--- a/engines/director/castmember/palette.h
+++ b/engines/director/castmember/palette.h
@@ -30,9 +30,10 @@ class PaletteCastMember : public CastMember {
 public:
 	PaletteCastMember(Cast *cast, uint16 castId, Common::SeekableReadStreamEndian &stream, uint16 version);
 	PaletteCastMember(Cast *cast, uint16 castId, PaletteCastMember &source);
+	PaletteCastMember(Cast *cast, uint16 castId, byte *paletteData, PaletteV4 *palette);
 	~PaletteCastMember();
 
-	CastMember *duplicate(Cast *cast, uint16 castId) override { return (CastMember *)(new PaletteCastMember(cast, castId, *this)); }
+	CastMember *duplicate(Cast *cast, uint16 castId) override;
 
 	CastMemberID getPaletteId();
 	void activatePalette();




More information about the Scummvm-git-logs mailing list