From 72d87848d3c133cfdd693fa1b32c80ddf30a567f Mon Sep 17 00:00:00 2001
From: Tim Felgentreff <timfelgentreff@gmail.com>
Date: Sun, 10 Apr 2022 07:40:32 +0200
Subject: [PATCH] use 32-bit alpha for fancy shadows

---
 src/video/graphic.cpp | 20 ++++++++++++--------
 1 file changed, 12 insertions(+), 8 deletions(-)

diff --git a/src/video/graphic.cpp b/src/video/graphic.cpp
index f09d6bf88..73c4b8b27 100644
--- a/src/video/graphic.cpp
+++ b/src/video/graphic.cpp
@@ -1063,16 +1063,20 @@ static inline void dither(SDL_Surface *Surface) {
 void CGraphic::MakeShadow()
 {
 	if (Surface->format->BytesPerPixel == 1) {
-		SDL_Color colors[256];
-
-		// Set all colors in the palette to black and use dithering for alpha
-		memset(colors, 0, sizeof(colors));
-		SDL_SetPaletteColors(Surface->format->palette, colors, 0, 256);
-		dither(Surface);
+		SDL_Surface *alphaSurface = SDL_CreateRGBSurface(0, Surface->w, Surface->h, 32, RMASK, GMASK, BMASK, AMASK);
+		SDL_BlitSurface(Surface, NULL, alphaSurface, NULL);
+		SDL_SetSurfaceAlphaMod(alphaSurface, 80);
+		SDL_SetSurfaceColorMod(alphaSurface, 0, 0, 0);
+		SDL_FreeSurface(Surface);
+		Surface = alphaSurface;
 
 		if (SurfaceFlip) {
-			SDL_SetPaletteColors(SurfaceFlip->format->palette, colors, 0, 256);
-			dither(Surface);
+			SDL_Surface *alphaSurfaceFlip = SDL_CreateRGBSurface(0, SurfaceFlip->w, SurfaceFlip->h, 32, RMASK, GMASK, BMASK, AMASK);
+			SDL_BlitSurface(SurfaceFlip, NULL, alphaSurfaceFlip, NULL);
+			SDL_SetSurfaceAlphaMod(alphaSurfaceFlip, 80);
+			SDL_SetSurfaceColorMod(alphaSurfaceFlip, 0, 0, 0);
+			SDL_FreeSurface(SurfaceFlip);
+			SurfaceFlip = alphaSurfaceFlip;
 		}
 	}
 }