From 737a26bfb3e81a404b37365b17b5d1400c54da91 Mon Sep 17 00:00:00 2001 From: FunkyFr3sh Date: Tue, 30 Oct 2018 21:48:01 +0100 Subject: [PATCH] add Dungeon Keeper preset + required hack --- inc/palette.h | 1 + src/palette.c | 3 +++ src/settings.c | 5 +++++ src/surface.c | 2 +- 4 files changed, 10 insertions(+), 1 deletion(-) diff --git a/inc/palette.h b/inc/palette.h index ee4d978..5132ee7 100644 --- a/inc/palette.h +++ b/inc/palette.h @@ -51,5 +51,6 @@ struct IDirectDrawPaletteImplVtbl } IDirectDrawPaletteImplVtbl; HRESULT __stdcall ddraw_CreatePalette(IDirectDrawImpl *This, DWORD dwFlags, LPPALETTEENTRY DDColorArray, LPDIRECTDRAWPALETTE FAR * DDPalette, IUnknown FAR * unkOuter); +extern IDirectDrawPaletteImpl *LastFreedPalette; #endif diff --git a/src/palette.c b/src/palette.c index 5d3b37b..e23d4e8 100644 --- a/src/palette.c +++ b/src/palette.c @@ -19,6 +19,8 @@ #include "palette.h" #include "surface.h" +IDirectDrawPaletteImpl *LastFreedPalette; // Dungeon Keeper hack + HRESULT __stdcall ddraw_palette_GetEntries(IDirectDrawPaletteImpl *This, DWORD dwFlags, DWORD dwBase, DWORD dwNumEntries, LPPALETTEENTRY lpEntries) { int i, x; @@ -91,6 +93,7 @@ ULONG __stdcall ddraw_palette_Release(IDirectDrawPaletteImpl *This) if(This->Ref == 0) { + LastFreedPalette = This; HeapFree(GetProcessHeap(), 0, This); return 0; } diff --git a/src/settings.c b/src/settings.c index a556bf9..869475b 100644 --- a/src/settings.c +++ b/src/settings.c @@ -236,6 +236,11 @@ static void CreateSettingsIni() "noactivateapp=true\n" "sleep=10\n" "\n" + "[KEEPER95]\n" + "border=false\n" + "posX=0\n" + "posY=0\n" + "\n" , fh); fclose(fh); diff --git a/src/surface.c b/src/surface.c index aa972d4..02dd4c3 100644 --- a/src/surface.c +++ b/src/surface.c @@ -64,7 +64,7 @@ ULONG __stdcall ddraw_surface_Release(IDirectDrawSurfaceImpl *This) if (This->bmi) HeapFree(GetProcessHeap(), 0, This->bmi); - if(This->palette) + if(This->palette && This->palette != LastFreedPalette) { IDirectDrawPalette_Release(This->palette); }