[Scummvm-git-logs] scummvm master -> 259accebac45757b3a3e26c954cdd9e0f24943aa

dreammaster dreammaster at scummvm.org
Mon Jun 21 02:16:18 UTC 2021


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

Summary:
827efed918 AGS: Added detection entries
aec0a06700 AGS: Enable setting paletted graphics mode
259accebac AGS: Properly update palette in 8-bit paletted mode


Commit: 827efed9182201fd65eca02a226a3104c16dd3a5
    https://github.com/scummvm/scummvm/commit/827efed9182201fd65eca02a226a3104c16dd3a5
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2021-06-20T19:15:55-07:00

Commit Message:
AGS: Added detection entries

Changed paths:
    engines/ags/detection_tables.h


diff --git a/engines/ags/detection_tables.h b/engines/ags/detection_tables.h
index b1c184a6dd..ca77a4286d 100644
--- a/engines/ags/detection_tables.h
+++ b/engines/ags/detection_tables.h
@@ -1273,6 +1273,7 @@ const PlainGameDescriptor GAME_NAMES[] = {
 	{ "roccioquest", "Roccio Quest" },
 	{ "rockabillykid", "Rockabilly Kid" },
 	{ "rockburgerstreehouses", "Rock Burgers & Tree Houses" },
+	{ "rockpaperscissors2", "Rock Paper Scissors Reboot" },
 	{ "rockrockrock", "Rock Rock Rock" },
 	{ "rockyroams", "Rocky roams" },
 	{ "rodequest2", "Rode Quest 2" },
@@ -1286,6 +1287,7 @@ const PlainGameDescriptor GAME_NAMES[] = {
 	{ "rowengoestowork", "Rowen Goes To Work" },
 	{ "rs15", "rs15" },
 	{ "rudeawakening", "Rude Awakening" },
+	{ "runestones", "Runestones!" },
 	{ "ryansdayout", "Ryan's Day Out" },
 	{ "saddsonissein", "Saddson Issein" },
 	{ "salazarsevilplan", "Salazar's evil plan" },
@@ -3238,6 +3240,7 @@ const AGSGameDescription GAME_DESCRIPTIONS[] = {
 	GAME_ENTRY("roccioquest", "RoccioQuest.exe", "7727bf5360b00bfc1947455218137803", 5797284),
 	GAME_ENTRY("rockabillykid", "Rockabilly Kid.exe", "ff3358d8f2726d544aadfde4f1ec8407", 2650305),
 	GAME_ENTRY("rockburgerstreehouses", "RBTH.exe", "88cf59aad15ca331ab0f854e16c84df3", 1876674),
+	GAME_ENTRY("rockpaperscissors2", "Rock, Paper, Scissors 2.exe", "89a94326c8afd9e0234e269bd7330130", 2926218),
 	GAME_ENTRY("rockrockrock", "rrr.exe", "7dd36aa863ed40ede1b09ae505e478cc", 9362761),
 	GAME_ENTRY("rockyroams", "Rocky.exe", "a01a9639ce30bdcd5bf82e528b51fa06", 16978200),
 	GAME_ENTRY("rodequest2", "RQ2.exe", "12c03a3c782237821acd590fd91af4c5", 4192097),
@@ -3251,6 +3254,7 @@ const AGSGameDescription GAME_DESCRIPTIONS[] = {
 	GAME_ENTRY("rowengoestowork", "Rowen.exe", "a1cef60926235b85bd0e1866b19e0dc7", 3791058),
 	GAME_ENTRY("rs15", "rs15.exe", "3b7cceb3e4bdb031dc5d8f290936e94b", 13638597),
 	GAME_ENTRY("rudeawakening", "RudeAwakening.exe", "0710e2ec71042617f565c01824f0cf3c", 8038257),
+	GAME_ENTRY("runestones", "Project Forsetti.exe", "c0d48dcc2003d4de0410cb8612d1c3e6", 37111243),
 	GAME_ENTRY("ryansdayout", "Ryan's Day out.exe", "06a03fe35791b0578068ab1873455463", 2573584),
 	GAME_ENTRY("saddsonissein", "Issein.exe", "3e8667bab45f2e5d7237db53ab376400", 4070795),
 	GAME_ENTRY("salazarsevilplan", "Jonny Smallvalley.exe", "a524cbb1c51589903c4043b98917f1d9", 64646627),


Commit: aec0a06700cb694bb505f02c2201bec11bdd4b15
    https://github.com/scummvm/scummvm/commit/aec0a06700cb694bb505f02c2201bec11bdd4b15
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2021-06-20T19:15:56-07:00

Commit Message:
AGS: Enable setting paletted graphics mode

Changed paths:
    engines/ags/ags.cpp
    engines/ags/ags.h
    engines/ags/engine/gfx/ali_3d_scummvm.cpp
    engines/ags/lib/allegro/color.cpp
    engines/ags/lib/allegro/color.h
    engines/ags/lib/allegro/gfx.cpp
    engines/ags/lib/allegro/gfx.h


diff --git a/engines/ags/ags.cpp b/engines/ags/ags.cpp
index 3423127085..e18565689b 100644
--- a/engines/ags/ags.cpp
+++ b/engines/ags/ags.cpp
@@ -181,13 +181,33 @@ SaveStateList AGSEngine::listSaves() const {
 	return getMetaEngine()->listSaves(_targetName.c_str());
 }
 
-void AGSEngine::setGraphicsMode(size_t w, size_t h) {
+bool AGSEngine::getPixelFormat(int depth, Graphics::PixelFormat &format) const {
+	Common::List<Graphics::PixelFormat> supportedFormatsList = g_system->getSupportedFormats();
+
+	if (depth == 8) {
+		format = Graphics::PixelFormat::createFormatCLUT8();
+		return true;
+	}
+
+	for (Common::List<Graphics::PixelFormat>::iterator it =
+			supportedFormatsList.begin(); it != supportedFormatsList.end(); ++it) {
+		if (it->bpp() == depth) {
+			format = *it;
+			return true;
+		}
+	}
+
+	return false;
+}
+
+
+void AGSEngine::setGraphicsMode(size_t w, size_t h, int colorDepth) {
 	Common::List<Graphics::PixelFormat> supportedFormatsList = g_system->getSupportedFormats();
 	Graphics::PixelFormat format;
-	if (!supportedFormatsList.empty())
-		format = supportedFormatsList.front();
-	else
-		format = Graphics::PixelFormat(4, 8, 8, 8, 8, 24, 16, 8, 0);
+	if (!getPixelFormat(colorDepth, format))
+		error("Unsupported color depth %d", colorDepth);
+	//Graphics::PixelFormat(4, 8, 8, 8, 8, 24, 16, 8, 0);
+
 	initGraphics(w, h, &format);
 
 	_rawScreen = new Graphics::Screen();
diff --git a/engines/ags/ags.h b/engines/ags/ags.h
index ddc55e7507..a55b8047d6 100644
--- a/engines/ags/ags.h
+++ b/engines/ags/ags.h
@@ -117,9 +117,14 @@ public:
 	}
 
 	/**
-	 * Setse up the graphics mode
+	 * Returns a pixel format for the given color depth.
 	 */
-	void setGraphicsMode(size_t w, size_t h);
+	bool getPixelFormat(int depth, Graphics::PixelFormat &format) const;
+
+	/**
+	 * Sets up the graphics mode
+	 */
+	void setGraphicsMode(size_t w, size_t h, int depth);
 
 	bool hasFeature(EngineFeature f) const override {
 		return
diff --git a/engines/ags/engine/gfx/ali_3d_scummvm.cpp b/engines/ags/engine/gfx/ali_3d_scummvm.cpp
index baa4cd31ce..8325d98952 100644
--- a/engines/ags/engine/gfx/ali_3d_scummvm.cpp
+++ b/engines/ags/engine/gfx/ali_3d_scummvm.cpp
@@ -58,15 +58,14 @@ ScummVMRendererGraphicsDriver::ScummVMRendererGraphicsDriver() {
 }
 
 bool ScummVMRendererGraphicsDriver::IsModeSupported(const DisplayMode &mode) {
-	if (mode.Width <= 0 || mode.Height <= 0) {
-		warning("Invalid resolution parameters: %d x %d", mode.Width, mode.Height);
+	if (mode.Width <= 0 || mode.Height <= 0 || mode.ColorDepth <= 0) {
+		warning("Invalid resolution parameters: %d x %d x %d",
+			mode.Width, mode.Height, mode.ColorDepth);
 		return false;
 	}
-	if (mode.ColorDepth != 32) {
-		warning("Display colour depth not supported: %d", mode.ColorDepth);
-		return false;
-	}
-	return true;
+
+	Graphics::PixelFormat format;
+	return ::AGS::g_vm->getPixelFormat(mode.ColorDepth, format);
 }
 
 int ScummVMRendererGraphicsDriver::GetDisplayDepthForNativeDepth(int native_color_depth) const {
@@ -112,7 +111,7 @@ bool ScummVMRendererGraphicsDriver::SetDisplayMode(const DisplayMode &mode) {
 		return false;
 
 	const int driver = mode.Windowed ? GFX_SCUMMVM : GFX_SCUMMVM_FULLSCREEN;
-	if (set_gfx_mode(driver, mode.Width, mode.Height, 0, 0) != 0)
+	if (set_gfx_mode(driver, mode.Width, mode.Height, mode.ColorDepth) != 0)
 		return false;
 
 	OnInit();
diff --git a/engines/ags/lib/allegro/color.cpp b/engines/ags/lib/allegro/color.cpp
index 05e208950a..8520226044 100644
--- a/engines/ags/lib/allegro/color.cpp
+++ b/engines/ags/lib/allegro/color.cpp
@@ -48,11 +48,6 @@ void color::writeToFile(AGS::Shared::Stream *file) const {
 	file->WriteByte(filler);
 }
 
-
-void set_color(int idx, const RGB *p) {
-	_G(current_palette)[idx] = *p;
-}
-
 void set_palette(const PALETTE p) {
 	for (int idx = 0; idx < PAL_SIZE; ++idx)
 		_G(current_palette)[idx] = p[idx];
diff --git a/engines/ags/lib/allegro/color.h b/engines/ags/lib/allegro/color.h
index 2b8c79849e..aca8250b12 100644
--- a/engines/ags/lib/allegro/color.h
+++ b/engines/ags/lib/allegro/color.h
@@ -48,11 +48,11 @@ class Stream;
 #include "common/pack-start.h"  // START STRUCT PACKING
 
 struct color {
-byte r, g, b;
-byte filler;
+	byte r, g, b;
+	byte filler;
 
-void readFromFile(AGS::Shared::Stream *file);
-void writeToFile(AGS::Shared::Stream *file) const;
+	void readFromFile(AGS::Shared::Stream *file);
+	void writeToFile(AGS::Shared::Stream *file) const;
 } PACKED_STRUCT;
 
 typedef color RGB;
@@ -61,30 +61,29 @@ typedef RGB PALETTE[PAL_SIZE];
 #include "common/pack-end.h"    // END STRUCT PACKING
 
 struct RGB_MAP {
-byte data[32][32][32];
+	byte data[32][32][32];
 };
 
 struct COLOR_MAP {
-byte data[PAL_SIZE][PAL_SIZE];
+	byte data[PAL_SIZE][PAL_SIZE];
 };
 
 enum BlenderMode {
-kSourceAlphaBlender,
-kArgbToArgbBlender,
-kArgbToRgbBlender,
-kRgbToArgbBlender,
-kRgbToRgbBlender,
-kAlphaPreservedBlenderMode,
-kOpaqueBlenderMode,
-kAdditiveBlenderMode,
-kTintBlenderMode,
-kTintLightBlenderMode
+	kSourceAlphaBlender,
+	kArgbToArgbBlender,
+	kArgbToRgbBlender,
+	kRgbToArgbBlender,
+	kRgbToRgbBlender,
+	kAlphaPreservedBlenderMode,
+	kOpaqueBlenderMode,
+	kAdditiveBlenderMode,
+	kTintBlenderMode,
+	kTintLightBlenderMode
 };
 
 AL_ARRAY(const int, _rgb_scale_5);
 AL_ARRAY(const int, _rgb_scale_6);
 
-AL_FUNC(void, set_color, (int idx, AL_CONST RGB *p));
 AL_FUNC(void, set_palette, (AL_CONST PALETTE p));
 AL_FUNC(void, set_palette_range, (AL_CONST PALETTE p, int from, int to, int retracesync));
 
diff --git a/engines/ags/lib/allegro/gfx.cpp b/engines/ags/lib/allegro/gfx.cpp
index 9534c81673..dc601afc94 100644
--- a/engines/ags/lib/allegro/gfx.cpp
+++ b/engines/ags/lib/allegro/gfx.cpp
@@ -44,11 +44,11 @@ int get_color_conversion() {
 	return color_conversion;
 }
 
-int set_gfx_mode(int card, int w, int h, int v_w, int v_h) {
+int set_gfx_mode(int card, int w, int h, int depth) {
 	// Graphics shutdown can be ignored
 	if (card != -1) {
 		assert(card == SCUMMVM_ID);
-		::AGS::g_vm->setGraphicsMode(w, h);
+		::AGS::g_vm->setGraphicsMode(w, h, depth);
 	}
 	return 0;
 }
diff --git a/engines/ags/lib/allegro/gfx.h b/engines/ags/lib/allegro/gfx.h
index b42b8e4ff3..80c68620e5 100644
--- a/engines/ags/lib/allegro/gfx.h
+++ b/engines/ags/lib/allegro/gfx.h
@@ -176,7 +176,7 @@ namespace AGS3 {
 
 AL_FUNC(void, set_color_conversion, (int mode));
 AL_FUNC(int, get_color_conversion, ());
-AL_FUNC(int, set_gfx_mode, (int card, int w, int h, int v_w, int v_h));
+AL_FUNC(int, set_gfx_mode, (int card, int w, int h, int depth));
 
 AL_FUNC(void, set_clip_rect, (BITMAP *bitmap, int x1, int y1, int x2, int y2));
 AL_FUNC(void, get_clip_rect, (BITMAP *bitmap, int *x1, int *y1, int *x2, int *y2));


Commit: 259accebac45757b3a3e26c954cdd9e0f24943aa
    https://github.com/scummvm/scummvm/commit/259accebac45757b3a3e26c954cdd9e0f24943aa
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2021-06-20T19:15:56-07:00

Commit Message:
AGS: Properly update palette in 8-bit paletted mode

Changed paths:
    engines/ags/engine/gfx/ali_3d_scummvm.cpp
    engines/ags/lib/allegro/color.cpp


diff --git a/engines/ags/engine/gfx/ali_3d_scummvm.cpp b/engines/ags/engine/gfx/ali_3d_scummvm.cpp
index 8325d98952..17edbce59a 100644
--- a/engines/ags/engine/gfx/ali_3d_scummvm.cpp
+++ b/engines/ags/engine/gfx/ali_3d_scummvm.cpp
@@ -249,13 +249,23 @@ int ScummVMRendererGraphicsDriver::GetCompatibleBitmapFormat(int color_depth) {
 
 IDriverDependantBitmap *ScummVMRendererGraphicsDriver::CreateDDBFromBitmap(Bitmap *bitmap, bool hasAlpha, bool opaque) {
 	ALSoftwareBitmap *newBitmap = new ALSoftwareBitmap(bitmap, opaque, hasAlpha);
+	UpdateDDBFromBitmap(newBitmap, bitmap, hasAlpha);
 	return newBitmap;
 }
 
 void ScummVMRendererGraphicsDriver::UpdateDDBFromBitmap(IDriverDependantBitmap *bitmapToUpdate, Bitmap *bitmap, bool hasAlpha) {
-	ALSoftwareBitmap *alSwBmp = (ALSoftwareBitmap *)bitmapToUpdate;
-	alSwBmp->_bmp = bitmap;
-	alSwBmp->_hasAlpha = hasAlpha;
+	ALSoftwareBitmap *target = (ALSoftwareBitmap *)bitmapToUpdate;
+	if (target->GetWidth() != bitmap->GetWidth() || target->GetHeight() != bitmap->GetHeight())
+		error("UpdateDDBFromBitmap: mismatched bitmap size");
+	const int color_depth = bitmap->GetColorDepth();
+	if (color_depth != target->GetColorDepth())
+		error("UpdateDDBFromBitmap: mismatched colour depths");
+
+	if (color_depth == 8) {
+		select_palette(_G(palette));
+
+		unselect_palette();
+	}
 }
 
 void ScummVMRendererGraphicsDriver::DestroyDDB(IDriverDependantBitmap *bitmap) {
diff --git a/engines/ags/lib/allegro/color.cpp b/engines/ags/lib/allegro/color.cpp
index 8520226044..1125fd78a2 100644
--- a/engines/ags/lib/allegro/color.cpp
+++ b/engines/ags/lib/allegro/color.cpp
@@ -48,15 +48,34 @@ void color::writeToFile(AGS::Shared::Stream *file) const {
 	file->WriteByte(filler);
 }
 
+static void convertPalette(const PALETTE src, byte dest[PALETTE_SIZE]) {
+	const color *cSrc = (const color *)src;
+	for (int i = 0; i < PALETTE_COUNT; ++i, cSrc++, dest += 3) {
+		dest[0] = VGA_COLOR_TRANS(cSrc->r);
+		dest[1] = VGA_COLOR_TRANS(cSrc->g);
+		dest[2] = VGA_COLOR_TRANS(cSrc->b);
+	}
+}
+
+static void applyPalette() {
+	byte pal[PALETTE_SIZE];
+	convertPalette(_G(current_palette), pal);
+	g_system->getPaletteManager()->setPalette(pal, 0, PALETTE_COUNT);
+}
+
 void set_palette(const PALETTE p) {
 	for (int idx = 0; idx < PAL_SIZE; ++idx)
 		_G(current_palette)[idx] = p[idx];
+
+	applyPalette();
 }
 
 void set_palette_range(const PALETTE p, int from, int to, int retracesync) {
 	for (int i = from; i <= to; ++i) {
 		_G(current_palette)[i] = p[i];
 	}
+
+	applyPalette();
 }
 
 int makecol15(int r, int g, int b) {
@@ -163,15 +182,15 @@ int makecol8(byte r, byte g, byte b) {
 }
 
 void get_color(int idx, RGB *p) {
-	warning("TODO: get_color");
+	*p = _G(current_palette)[idx];
 }
 
 void get_palette(PALETTE p) {
-	warning("TODO: get_palette");
+	*p = *_G(current_palette);
 }
 
 void get_palette_range(PALETTE p, int from, int to) {
-	warning("TODO: get_palette_range");
+	Common::copy(&_G(current_palette)[from], &_G(current_palette)[to + 1], &p[from]);
 }
 
 void fade_interpolate(AL_CONST PALETTE source, AL_CONST PALETTE dest, PALETTE output, int pos, int from, int to) {
@@ -186,7 +205,7 @@ void select_palette(AL_CONST PALETTE p) {
 		_G(current_palette)[c] = p[c];
 	}
 
-	// TODO: See if the remainder of Allegro's select_palette method is needed for AGS
+	applyPalette();
 }
 
 void unselect_palette(void) {
@@ -194,6 +213,8 @@ void unselect_palette(void) {
 
 	for (c = 0; c < PAL_SIZE; c++)
 		_G(current_palette)[c] = _G(prev_current_palette)[c];
+
+	applyPalette();
 }
 
 void set_blender_mode(BlenderMode m, int r, int g, int b, int a) {




More information about the Scummvm-git-logs mailing list